回收步骤:

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步获取】

注:如果日志文件回收不了,可以参考帮助文档做一个收缩事务日志的操作,是有可能收缩掉的
https://help.aliyun.com/knowledge_detail/41796.html

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,command

, percent_complete

, dateadd(mi ,estimated_completion_time/60000,getdate ()) as ETC

FROM sys.dm_exec_requests where percent_complete<>0

说明

SQLServer是单线程运行文件收缩,即使你有多个CPU性能也不会有帮助

这里我做了一个测试,打开两个Query同时运行ShrinkFile命令,第二个语句会报错:

File ID 1 of database ID 17 cannot be shrunk as it is eitherbeing shrunk by another process or is empty.

DBCCexecution completed. If DBCC printed error messages, contact your systemadministrator.

也就是说只能有一个收缩数据运行,运行第二个的时候就会报错,可通过上面的第6步查看是否有正在进行的压缩进程

文件收缩的三个步骤(可以从sys.dm_exec_request command栏位看到)

步骤     Command                    描述

1          DbccSpaceReclaim      清理延迟分配并清除为数据移动做准备的空区段.

2          DbccFilesCompact       根据需要将页面从目标移动到目标之前并截断文件.

3          DbccLOBCompact       压缩 LOB data.

sql数据库收缩的更多相关文章

  1. Sql数据库收缩 语句特别快

    数据库在收缩的时候..使用菜单 >> 任务 >> 收缩 >> 文件 >> 数据,  特别慢..还会报错失败.. 但使用脚本 USE [dbName] G ...

  2. 收缩SQL数据库日志文件

    收缩SQL数据库日志文件 介绍具体的操作方法前,先说下我操作的实际环境和当时的状况.我的服务器是windows server 2008 R2 64位英文版,数据库是SQL server 2008英文版 ...

  3. 收缩SQL数据库日志

    各位同学,相信大家在使用SQL数据库时,常常会遇到日志文件比数据库文件还在大的情况.以下有一简单的办法,可以快速的删除日志档.使用其大小变为540K. 供各位参考. DUMP TRANSACTION ...

  4. 数据库收缩:NOTRUNCATE与TRUNCATEONLY

    在进行数据库收缩时,我们有2个可用选项:NOTRUNCATE,TRUNCATEONLY.这篇文章我们会详细讨论下这2个选项的具体区别. NOTRUNCATE 当你对数据库收缩命令提供NOTRUNCAT ...

  5. sql 数据库的备份还原问题

    今天工作中犯了一个严重的错误,就是在sql中写了一个update语句,还没写条件呢,结果误按了F5,唉,太佩服自己啦...这个脑子怎么不管用了呢?? 唉不说了,我在网上翻来覆去的找资料,最终想是不是可 ...

  6. sql数据库的备份还原问题

    sql数据库的备份还原问题 今天工作中犯了一个严重的错误,就是在sql中写了一个update语句,还没写条件呢,结果误按了F5,唉,太佩服自己啦...这个脑子怎么不管用了呢?? 唉不说了,我在网上翻来 ...

  7. 用友金蝶SQL数据库误格式化恢复 SQL数据库修复 SQL数据库恢复 工具 方法

    用友金蝶SQL数据库误格式化恢复 SQL数据库修复 SQL数据库恢复 硬盘误格式化.重分区.重装操作系统覆盖 SQL数据解决方法 [客户名称]:贵州铜仁市开天驾驶人培训中心 [软件名称]:用友T3普及 ...

  8. SQL数据库文件修复/用友/金蝶/管家婆/速达/思讯数据库恢复 硬盘恢复

    硬盘的故障情况可以分为以下几类: 1.控制电路故障 大部分外电路的问题是电源芯片或主轴驱动芯片烧坏引起的,由于硬盘电路板质量问题.设计缺陷.市电波动.突然断电.芯片老化或者散热不良.静电等原因造成芯片 ...

  9. MS SQL 数据库所在C盘变得很大解决办法

    C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\LOG 一般是这个文件夹里的ERRORLOG变得很大.所以要清理. 执行一次EXEC sp_cy ...

随机推荐

  1. shell学习笔记1---shell编程基础

    Shell是什么? Shell 是一个应用程序,它连接了用户和 Linux 内核,让用户能够更加高效.安全.低成本地使用 Linux 内核,这就是 Shell 的本质. Shell 本身并不是内核的一 ...

  2. 打印Java main参数

    public class Main { public static void main(String args[]){ System.out.println("打印main方法中的输入参数, ...

  3. 区块链开源实现hyperledger fabric架构详解

    hyperledger fabric是区块链中联盟链的优秀实现,主要代码由IBM.Intel.各大银行等贡献,目前v1.1版的kafka共识方式可达到1000/s次的吞吐量.本文中我们依次讨论:区块链 ...

  4. Elastic Search安装-windows

    转载自:https://blog.csdn.net/linkkb/article/details/82805145 其中稍作修改 ElasticSearch介绍 ES是一个基于Lucene的分布式全文 ...

  5. 执行rpm -ivh 时报错:error rpmdb BDB0113 Threadprocess 11690140458095421504 failed

    执行rpm -ivh 时报错:error rpmdb BDB0113 Threadprocess 11690140458095421504 failed 1.具体报错如下: [root@heyong ...

  6. php内置函数分析之strpos()

    PHP_FUNCTION(strpos) { zval *needle; zend_string *haystack; char *found = NULL; ]; zend_long offset ...

  7. CF1103C Johnny Solving (Codeforces Round #534 (Div. 1)) 思维+构造

    题目传送门 https://codeforces.com/contest/1103/problem/C 题解 这个题还算一个有难度的不错的题目吧. 题目给出了两种回答方式: 找出一条长度 \(\geq ...

  8. 前端每日实战:12# 视频演示如何用纯 CSS 创作一种文字断开的交互特效

    效果预览 按下右侧的"点击预览"按钮在当前页面预览,点击链接全屏预览. https://codepen.io/zhang-ou/pen/LmjNgL 可交互视频教程 此视频是可以交 ...

  9. JavaScript变量和字面量

    一.什么是变量? 首先了解一下什么是内存:内存就是保存程序在运行过程中,所需要用到的数据8bit(比特是表示信息的最小单位). 8bit=1byte 1024byte=1MB 1024MB=1GB 1 ...

  10. js数字每3位加一个逗号

    if(typeof val ==="number"){ var str = val.toString(); ? /(\d)(?=(\d{})+\.)/g : /(\d)(?=(?: ...