首页前端开发其他前端知识SQL Server数据文件收缩和查看收缩进度的方法是什么

SQL Server数据文件收缩和查看收缩进度的方法是什么

时间2023-03-29 16:41:11发布访客分类其他前端知识浏览1704
导读:这篇文章主要介绍“SQLServer数据文件收缩和查看收缩进度的方法是什么”,在日常操作中,相信很多人在SQLServer数据文件收缩和查看收缩进度的方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”S...
这篇文章主要介绍“SQLServer数据文件收缩和查看收缩进度的方法是什么”,在日常操作中,相信很多人在SQLServer数据文件收缩和查看收缩进度的方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”SQLServer数据文件收缩和查看收缩进度的方法是什么”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

SQL Server在删除数据后,会重新利用这部分空间,所以如果不是空间紧张的情况下,可以不回收。

回收一般先回收日志文件,因为这个回收速度非常快,可以短时间内清理出一部分可用空间。

回收步骤:

1、查看日志文件大小【一般回收比较大的】

--适用于RDSForSQLServer2012
SELECTDB_NAME(database_id)AS[DatabaseName],[Name]AS[LogicalName],[Physical_Name]AS[PhysicalName],((size*8)/1024)AS[Size(MB)]
FROMsys.master_files
ORDERBY[Size(MB)]DESC
--适用于RDSForSQLServer2008R2,需要对数据库逐个执行
USE数据库名
GO
SELECTa.nameas逻辑文件名,size/128[totalspace文件大小(兆)],
FILEPROPERTY(a.name,'SpaceUsed')/128[usedspace已用空间(兆)],
size/128-FILEPROPERTY(a.name,'SpaceUsed')/128[未用空间(兆)],
FILEPROPERTY(a.name,'SpaceUsed')*100.0/size[使用率(%)]
FROMsys.database_filesacrossjoin(selectrecovery_model_desc,log_reuse_wait,log_reuse_wait_desc,is_auto_shrink_onfromsys.databaseswherename=DB_NAME())b
WHEREtype=1

2、查看日志文件空间是否可回收【只有log_reuse_wait_desc是NOTHING状态才可回收】

SELECT[name],[log_reuse_wait_desc]

FROMmaster.sys.databases

WHERE[name]='数据库名【第1步获取】'

3、回收日志文件空间

DBCCSHRINKFILE(logicalName【第1步获取】)
常见的日志等待类型是
LOG_BACKUP,日志还没有备份,所以不能截断
解决方案:
ACTIVE_TRANSACTION,有活跃事务阻塞了日志截断
解决方案:
执行DBCCOPENTRAN,获取下长时间的活跃事务的SPID
然后执行DBCCINPUTBUFFER(SPID)查看下这个请求SQL,考虑是否可以kill阻塞源,kill后再查下log_reuse_wait,尝试shrink

4、查看数据文件大小

USE数据库名
GO
SELECTa.nameas逻辑文件名,size/128[totalspace文件大小(兆)],
FILEPROPERTY(a.name,'SpaceUsed')/128[usedspace已用空间(兆)],
size/128-FILEPROPERTY(a.name,'SpaceUsed')/128[未用空间(兆)],
FILEPROPERTY(a.name,'SpaceUsed')*100.0/size[使用率(%)]
FROMsys.database_filesacrossjoin(selectrecovery_model_desc,log_reuse_wait,log_reuse_wait_desc,is_auto_shrink_onfromsys.databaseswherename=DB_NAME())b
WHEREtype=0

5、收缩数据文件【按照经验,最好每5G循环收缩,如果影响业务,随时中断,不会回滚】

declare@usedspaceint,@totalspaceint
select@usedspace=xxx,@totalspace=yyy
while@totalspace>
    @usedspace
begin
set@totalspace=@totalspace-5*1024
DBCCSHRINKFILE(逻辑文件名,@totalspace)
end

注:逻辑文件名,usedspace,totalspace从第4步的结果集获取

6、查看收缩进度【预估值】

SELECTDB_NAME(database_id)asdbname,
session_id,request_id,start_time
,percent_complete
,dateadd(mi,estimated_completion_time/60000,getdate())asETC
FROMsys.dm_exec_requestswherepercent_complete>
    0
--查询当前数据库备份进度
SELECTDB_NAME(er.[database_id])[DatabaseName],er.[command]AS[CommandType],er.[percent_complete]
,er.start_time,CONVERT(DECIMAL(5,2),er.[percent_complete])AS[Complete_Percent]
,CONVERT(DECIMAL(38,2),er.[total_elapsed_time]/60000.00)AS[ElapsedTime_m]
,CONVERT(DECIMAL(38,2),er.[estimated_completion_time]/60000.00)AS[EstimatedCompletionTime_m]
FROMsys.dm_exec_requestsASer
WHEREer.[command]in('RESTOREDATABASE','BACKUPDATABASE')--DB_NAME(er.[database_id])in('ky2011')and
--查看数据库收缩进度
SELECTDB_NAME(er.[database_id])[DatabaseName],er.[command]AS[CommandType],er.[percent_complete]
,er.start_time,CONVERT(DECIMAL(5,2),er.[percent_complete])AS[Complete_Percent]
,CONVERT(DECIMAL(38,2),er.[total_elapsed_time]/60000.00)AS[ElapsedTime_m]
,CONVERT(DECIMAL(38,2),er.[estimated_completion_time]/60000.00)AS[EstimatedCompletionTime_m]
FROMsys.dm_exec_requestsaserWHEREcommandin('DbccFilesCompact','AUTOSHRINK')

到此,关于“SQLServer数据文件收缩和查看收缩进度的方法是什么”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!

sqlserver

若转载请注明出处: SQL Server数据文件收缩和查看收缩进度的方法是什么
本文地址: https://pptw.com/jishu/717.html
Gitlab中如何优雅的拉取和合并代码(gitlab怎么拉取代码) 如何下载别人在Gitee中上传的代码(gitee怎么下载别人的代码)

游客 回复需填写必要信息