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

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

回收步骤:

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

--适用于RDS For SQL Server2012\2016

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

SQL Server磁盘空间清理 【转】的更多相关文章

  1. SQL Server 磁盘空间告急(磁盘扩容)转载

    一.背景 在线上系统中,如果我们发现存放数据库文件的磁盘空间不够,我们应该怎么办呢?新买一个硬盘挂载上去可以嘛?(linux下可以直接挂载硬盘进行扩容),但是我们的SQL Server是运行在Wind ...

  2. SQL Server 2008空间数据应用系列三:SQL Server 2008空间数据类型

    原文:SQL Server 2008空间数据应用系列三:SQL Server 2008空间数据类型 友情提示,您阅读本篇博文的先决条件如下: 1.本文示例基于Microsoft SQL Server ...

  3. docker磁盘空间清理办法

    docker磁盘空间清理办法 前段时间遇到docker磁盘空间太少,无法写入数据的问题.起因是因为我在本地(Mac Pro)运行了多个mysql容器,并且导入了一部分线上数据,最后还没导入完毕就已经没 ...

  4. SQL Server磁盘I/O性能分析

    SQL Server中的I/O操作类型: 1.对于内存中没有缓存的数据,第一次访问时需要将数据从所在的页面从数据文件中读取到内存中 2.在任何Insert/Update/Delete提交前,SQL S ...

  5. SQL Server数据库空间管理 (2)

     本篇内容主要解决剩余的两个问题:2).日志文件不停增长  4).自动增长和自动收缩 日志文件不停增长的解决 首先,当日志文件超过预期的时候,我们然要看看日志文件中存放了什么内容:DBCC LOG ; ...

  6. sql查询磁盘空间并发预警邮件

    检测磁盘空间,如果低于设置的预警值则发出一封预警邮件,这样的事情可以用SQL server的作业可以做,关键SQL语句如下例子所示: DECLARE @TableText NVARCHAR(MAX)= ...

  7. sql server 2008空间释放

    今天一原来的同事打电话说他们两个表加起来1.2t(每个表都有三四十个字段,6亿条记录),创建了索引之后空间增长到了2.2t,然后没有执行成功.问题在于虽然没执行成功,可是空间没有释放,整个系统只有2. ...

  8. sql server 表空间

    在SqlServer2005中,建表时是默认把所有的表都保存在PRIMARY默认表空间中的.当数据库中表很多,并且数据量很大时,会导致数据库性能严重下降,有必要将一些大的表放到不同的表空间中去.主要的 ...

  9. SQL Server 查看空间使用情况的 5 种方法

    解决方法: 方法 1.sp_spaceused 方法 2.dbcc sqlperf 方法 3.dbcc showfilestats 方法 4.dbcc showcontig 方法 5.sys.dm_d ...

  10. SQL Server数据库空间管理 (1)

    数据库经常遇到的问题: 1).数据库文件空间用尽  2).日志文件不停增长 3).数据库文件无法收缩  4).自动增长和自动收缩 本系列就以上面的4个问题入手分析并总结数据库空间的管理方法.   1. ...

随机推荐

  1. vulnhub - hackme1

    vulnhub - hackme1 信息收集 端口扫描 详细扫描 目录扫描跟漏洞探测没发现什么可用信息,除了登录还有一个uploads目录应该是进入后台之后才能使用 web主页是个登录注册页面,爆了一 ...

  2. Linux开发人员常用命令

    常用查询命令 # 查看ip地址 ip addr show # 查看当前目录路径 pwd # 当前目录下模糊查找文件 find / -name "*.pdf" 查看运行中进程 ps ...

  3. 大一新生的作业(洛谷P1150,1035,1075)

    本帖背景:此帖讲解大一新生团队作业 截止日期10-31 17:09 P1150(Peter的烟) 算法简介 本题主要考察的是模拟算法 模拟算法一般考察一些比较基础的题目,它将生活中的实例融合到了编程题 ...

  4. 洛谷P1003

    洛谷P1003 题目大意 简而言之就是在坐标轴上铺地毯,根据输入的坐标将地毯放在坐标轴上,然后最后给出一个坐标,找到铺在这个坐标上最上面的地毯编号 Train of thought 首先我们应该找到每 ...

  5. Unity的Package库在IDE里不显示API注释的解决方法

    当你在代码里使用Package库的API的时候,比如Addressable和Unity.Entities等等,以Visual Studio为例,鼠标放到API上,会发现不显示注释: 然而按F12访问源 ...

  6. django 如何查询汇总的求和时避免没有数据导致的错误

    django 如何查询汇总的求和时避免没有数据导致的错误 在 Django 中,如果你希望对某个字段进行求和操作,并在没有数据时返回默认值,可以使用 aggregate 结合 Coalesce 函数. ...

  7. django redirect_authenticated_user

    redirect_authenticated_user是在Web开发框架(如Django)中常见的设置,用于控制身份验证重定向的行为. 当启用redirect_authenticated_user时, ...

  8. [oeasy]python0129_unicode_中文字符序号_十三道大辙_字符编码解码_eval_火星文

    unicode 中文字符分类 回忆上次内容 字符集 从博多码 到 ascii 再到 iso-8859 系列 各自割据   如何把世界上各种字符统进行编码 unicode顺势而生不断进化 不过字符总量超 ...

  9. Java 线程池之ThreadPoolExecutor学习总结

    前提 java version "1.8.0_25" 池简述 软件开发活动中,我们经常会听到数据库连接池.内存池.线程池等各种"池"概念,这些"池&q ...

  10. 如何用 WinDbg 调试Linux上的 .NET程序

    一:背景 1. 讲故事 最新版本 1.2402.24001.0 的WinDbg真的让人很兴奋,可以将自己伪装成 GDB 来和远程的 GDBServer 打通来实现对 Linux 上 .NET程序进行调 ...