SQL Server 数据文件收缩和查看收缩进度的步骤
作者:VicLW 发布时间:2024-01-12 19:34:03
标签:SQL,Server,收缩
SQL Server在删除数据后,会重新利用这部分空间,所以如果不是空间紧张的情况下,可以不回收。
回收一般先回收日志文件,因为这个回收速度非常快,可以短时间内清理出一部分可用空间。
回收步骤:
1、查看日志文件大小【一般回收比较大的】
--适用于RDS For SQL Server2012
SELECT DB_NAME(database_id) AS [Database Name],[Name] AS [Logical Name],[Physical_Name] AS [Physical Name],((size * 8) / 1024) AS [Size(MB)]
FROM sys.master_files
ORDER BY [Size(MB)] DESC
--适用于RDS For SQL Server2008R2,需要对数据库逐个执行
USE 数据库名
GO
SELECT a.name as 逻辑文件名, size/128 [totalspace文件大小(兆)],
FILEPROPERTY(a.name, 'SpaceUsed')/128 [usedspace已用空间(兆)],
size/128 - FILEPROPERTY(a.name, 'SpaceUsed')/128 [未用空间(兆)],
FILEPROPERTY(a.name, 'SpaceUsed')*100.0/size [使用率(%)]
FROM sys.database_files a cross join (select recovery_model_desc, log_reuse_wait,log_reuse_wait_desc,is_auto_shrink_on from sys.databases where name=DB_NAME())b
WHERE type=1
2、查看日志文件空间是否可回收【只有log_reuse_wait_desc是NOTHING状态才可回收】
SELECT [name] ,[log_reuse_wait_desc]
FROM master.sys.databases
WHERE [name]='数据库名【第1步获取】'
3、回收日志文件空间
DBCC SHRINKFILE(logicalName【第1步获取】)
常见的日志等待类型是
LOG_BACKUP,日志还没有备份,所以不能截断
解决方案:
ACTIVE_TRANSACTION,有活跃事务阻塞了日志截断
解决方案:
执行 DBCC OPENTRAN ,获取下长时间的活跃事务的SPID
然后执行 DBCC INPUTBUFFER(SPID) 查看下这个请求SQL,考虑是否可以kill阻塞源,kill后再查下log_reuse_wait,尝试shrink
4、查看数据文件大小
USE 数据库名
GO
SELECT a.name as 逻辑文件名, size/128 [totalspace文件大小(兆)],
FILEPROPERTY(a.name, 'SpaceUsed')/128 [usedspace已用空间(兆)],
size/128 - FILEPROPERTY(a.name, 'SpaceUsed')/128 [未用空间(兆)],
FILEPROPERTY(a.name, 'SpaceUsed')*100.0/size [使用率(%)]
FROM sys.database_files a cross join (select recovery_model_desc, log_reuse_wait,log_reuse_wait_desc,is_auto_shrink_on from sys.databases where name=DB_NAME())b
WHERE type=0
5、收缩数据文件【按照经验,最好每5G循环收缩,如果影响业务,随时中断,不会回滚】
declare @usedspace int ,@totalspace int
select @usedspace= xxx,@totalspace =yyy
while @totalspace> @usedspace
begin
set @totalspace= @totalspace-5 *1024
DBCC SHRINKFILE( 逻辑文件名,@totalspace )
end
注:逻辑文件名,usedspace,totalspace从第4步的结果集获取
6、查看收缩进度【预估值】
SELECT DB_NAME(database_id) as dbname,
session_id, request_id, start_time
, percent_complete
, dateadd(mi ,estimated_completion_time/60000,getdate ()) as ETC
FROM sys.dm_exec_requests where percent_complete<>0
--查询当前数据库备份进度
SELECT DB_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]
FROM sys.dm_exec_requests AS er
WHERE er.[command] in ( 'RESTORE DATABASE' ,'BACKUP DATABASE') --DB_NAME(er.[database_id]) in ('ky2011') and
--查看数据库收缩进度
SELECT DB_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]
FROM sys.dm_exec_requests as er WHERE command in ('DbccFilesCompact','AUTOSHRINK')
来源:https://www.cnblogs.com/VicLiu/p/16126013.html


猜你喜欢
- 本文介绍了python画图时设置分辨率和画布大小的实现,主要使用plt.figure(),下面就一起来了解一下plt.figure()示例:
- Lists Snippets我们先从最常用的数据结构列表开始1.将两个列表合并成一个字典假设我们在 Python 中有两个列表,我们希望将它
- 本文给出了本人在使用 Sublime Text 配置 Python 环境的记录。主要为了解决中文乱码的问题以及 Sublime Text 默
- 需求:项目中需要把链接地址生成二维码,用户扫描二维码就可以打开页面实现如下:使用了vue-qriously插件使用步骤:安装npm inst
- 前言在我们抓取网页内容的时候,通常是抓取一整个页面的内容,而我们仅仅只是需要该网页中的部分内容,那该如何去提取呢?本章就带你学习xpath插
- 介绍vue-router相当于vue内部跳转链接,将需要切换的页面在vue-router里注册,在项目里配置就能完成页面的切换,它不仅能完成
- 本文实例讲述了Python生成器定义与简单用法。分享给大家供大家参考,具体如下:一、什么是生成器在Python中,由于受到内存的限制,列表容
- 在上篇博客中,提到了对一个脚本进行的多次优化。当时以为已经优化得差不多了,但是当测试人员测试时,我才发现,踩到了Python的一个大坑。在上
- 描述: 日志按日期、大小回滚代码:# -*- coding: utf-8 -*-import osimport logging.handle
- Pytorch:Conv2d卷积前后尺寸Conv2d参数尺寸变化卷积前的尺寸为(N,C,W,H) ,卷积后尺寸为(N,F,W_n,H_n)W
- MySql 8.0 对应驱动包匹配MySql 数据库更新为8.0及以上后,对应的应用程序数据库链接驱动包也要更新为8.0版本。否则会报驱动异
- Pandas之drop_duplicates:去除重复项方法DataFrame.drop_duplicates(subset=None, k
- 本文实例讲述了Python实现的自定义多线程多进程类。分享给大家供大家参考,具体如下:最近经常使用到对大量文件进行操作的程序以前每次写的时候
- 如何创建一个Python工程并使其具有Pycharm的代码风格,具体如下1、主题这部分教程主要介绍如何创建一个Python工程并使其具有Py
- 问题: jsp中想要输出的中文被显示成“?” 解决方法 : 在eclipse-windows- preferences中 搜索jsp , E
- 二元运算符特殊方法+__add__,__radd__-__sub__,__rsub__*__mul__,__rmul__/__div__,_
- 一、背景先要从 InnoDB 的索引实现说起,InnoDB 有两大类索引:聚集索引 (clustered index)普通索引 (secon
- 介绍Django是一个Web框架——一套用于帮助开发交互式网站的工具。Django能够响应网页请求,还能让我们更轻松地读写数据库、管理用户等
- 最近两天做项目总是被乱码问题困扰着,这不刚把mysql中文乱码问题解决了,下面小编把我的解决方案分享给大家,供大家参考,也方便以后自己查阅。
- 我们知道,全局临时表的生命周期一直持续到创建会话(不是创建级别)才终止。有时候,你可能想创建一个不属于任何会话的全局临时表。而无论你进行什么