SQL Server数据文件收缩和查看收缩进度的方法是什么
导读:这篇文章主要介绍“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核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: SQL Server数据文件收缩和查看收缩进度的方法是什么
本文地址: https://pptw.com/jishu/717.html