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. TOPSIS模型原理以及代码实现

    TOPSIS 法是一种常用的组内综合评价方法,能充分利用原始数据的信息,其结果能精确地反映各评价方案之间的差距.下面我们来介绍具体步骤与代码实现 目录 问题提出 第一步:数据输入 1.如何从excel ...

  2. input标签 只能输入纯数字

    <input type="number" pattern="number" onkeyup="value=value.replace(/[^\d ...

  3. 在宝塔上配置打包好的vue3项目

    配置文件如下 server{ listen 80; server_name gongchang.365cb.cn; index index.html index.htm default.php def ...

  4. Mysql实现主从复制(一主双从)

    一.环境介绍 LNMP(centos7,mysql5.6) vmware workstation pro配置了3个虚拟机,均安装了LNMP环境: master:  192.168.0.105 slav ...

  5. 在Python中使用SWCNN去除水印

    在Python中使用SWCNN去除水印 说明 首次发表日期:2024-07-17 SWCNN Github官方仓库: https://github.com/hellloxiaotian/SWCNN S ...

  6. 回顾 JavaScript

    回顾 JavaScript 阅读前建议了解 ECMAScript 是什么? 不然你可能会疑惑下面内容 JavaScript 中掺杂的 ECMAScript 需要大体了解过 JavaScript 主要是 ...

  7. CF916C 题解

    CF916C 题解 思路 思考发现,如果我们让很多边的边权变得非常大,而故意留下 \(1\) 到 \(n\) 的某一条路径,使整条路径之和甚至还没有剩下一条边的权值大,这条路径显然就是最短路了. 更重 ...

  8. 【Vant】Vant 开发笔记

    手机端元素高度控制: 界面div标签超出了可视区域时,一定要设置高度: 让元素保持在可视区域滑动,Popup组件从底部渲染时才能正常 <div style="height: 100vh ...

  9. 【转载】英特尔CEO:如果美出口管制太严,中国就必须生产自己的芯片

    原文地址: https://mbd.baidu.com/newspage/data/landingsuper?context={"nid"%3A"news_9816136 ...

  10. No such file or directory: 'patchelf': 'patchelf'

    安装mujoco报错: No such file or directory: 'patchelf': 'patchelf' 解决方法: sudo apt-get install patchelf