SQL SERVER 的压缩功能

SQL SERVER 的压缩功能请关注个人小站:http://sqlhis.com/SQLSERVER2008及以上提供数据库表压缩功能1.压缩分类和比率压缩分为行(ROW)压缩和页(PAGE)压缩,页压缩的压缩比率更

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

请关注个人小站:http://sqlhis.com/

SQL SERVER 2008 及以上提供数据库表压缩功能

1. 压缩分类和比率

  压缩分为行(ROW)压缩和页(PAGE)压缩,页压缩的压缩比率更高一些,正常来说一般数据库可以实现50%以上的压缩比率。

2.对性能影响

  压缩后对磁盘的压力会减少,但是会增加CPU的压力,对性能的影响需要看机器的具体配置,在实际中情况中,经常是CPU没满但是磁盘已满负荷了。对备份恢复等极为有利,一个大数据库,全备份常常要3-4小时,压缩后,全备时间缩减到2小时。

 

以下代码生成全库的压缩脚本,注意只是生成脚本,将生成的脚本贴到SQL执行窗口中执行即可。

 


/*SQL Server 2008 以上,自动进行表压缩
直接运行生成的脚本文件即可
*/


SET NOCOUNT ON
CREATE TABLE #Temp
(
table_name NVARCHAR(1000),
index_name NVARCHAR(1000),
table_size decimal(19,2)
)


CREATE TABLE #tablespaceinfo
(
nameinfo VARCHAR(500) ,
rowsinfo BIGINT ,
reserved VARCHAR(20) ,
datainfo VARCHAR(20) ,
index_size VARCHAR(20) ,
unused VARCHAR(20)
)


INSERT #Temp(table_name,index_name)
SELECT DISTINCT ‘[‘+SCHEMA_NAME(schema_id)+’].[‘+a.name+’]’, ‘[‘+c.name+’]’
FROM sys.tables a
INNER JOIN sys.partitions b
ON a.object_id=b.object_id
AND b.data_compression=0
INNER JOIN sys.indexes c
ON a.object_id=c.object_id
AND b.index_id=c.index_id
WHERE a.type=’U’
AND SCHEMA_NAME(schema_id)!=’cdc’


 


 


DECLARE @l_tableName NVARCHAR(max)
WHILE EXISTS(SELECT * FROM #Temp WHERE table_size IS NULL)
BEGIN
SELECT TOP 1 @l_tableName=table_name FROM #Temp
WHERE table_size IS NULL


TRUNCATE TABLE #tablespaceinfo
INSERT #tablespaceinfo
EXEC sp_spaceused @l_tableName


UPDATE #Temp
SET table_size=(SELECT CAST(REPLACE(reserved, ‘KB’, ”) AS INT)*1.0/1024/1024 FROM #tablespaceinfo)
WHERE table_name=@l_tableName


END


–如果要查看压缩项目,
–SELECT * FROM #Temp
–ORDER BY table_size ASC


DECLARE @tablename NVARCHAR(255);
DECLARE @indexname NVARCHAR(255)
DECLARE @tablesize decimal(19,2)
DECLARE @sql NVARCHAR(MAX)
DECLARE @message NVARCHAR(MAX)
DECLARE Info_cursor CURSOR
FOR
SELECT table_name,index_name,table_size
FROM #Temp
ORDER BY table_size ASC


OPEN Info_cursor
FETCH NEXT FROM Info_cursor INTO @tablename ,@indexname,@tablesize

WHILE @@FETCH_STATUS = 0
BEGIN


–ALTER INDEX [MF_NVChange_ID] ON [dbo].[MF_NVChange] REBUILD PARTITION = ALL WITH (DATA_COMPRESSION = PAGE)
IF @indexname IS NOT NULL
BEGIN
SET @sql =’ALTER INDEX ‘+@indexname+ ‘ ON ‘ +@tablename + ‘ REBUILD PARTITION = ALL WITH (DATA_COMPRESSION = PAGE)’
SET @message=’RAISERROR(”’+ @indexname +’ ON ‘+@tablename+’ 已完成压缩 原空间=’+CAST(@tablesize AS nvarchar(30))+’G”,9,1) WITH NOWAIT’
END
ELSE
BEGIN
SET @sql =’ALTER TABLE ‘ +@tablename + ‘ REBUILD PARTITION = ALL WITH (DATA_COMPRESSION = PAGE)’
SET @message=’RAISERROR(”’+@tablename+’ 已完成压缩 原空间=’+CAST(@tablesize AS nvarchar(30))+’G”,9,1) WITH NOWAIT’
END


PRINT @sql
PRINT @message
–RAISERROR( @message,9,1)


FETCH NEXT FROM Info_cursor
INTO @tablename ,@indexname ,@tablesize
END

CLOSE Info_cursor
DEALLOCATE Info_cursor


DROP TABLE #Temp
DROP TABLE #tablespaceinfo

 

 生成的脚本类似如下,直接黏贴到窗口中执行即可

ALTER TABLE [dbo].[AAAAAAAAAAA] REBUILD PARTITION = ALL WITH (DATA_COMPRESSION = PAGE)
RAISERROR('[dbo].[AAAAAAAAAAA] 已完成压缩  原空间=0.00G',9,1) WITH NOWAIT

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/166637.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Access denied for user ‘root‘@‘localhost‘问题的解决「建议收藏」

    Access denied for user ‘root‘@‘localhost‘问题的解决「建议收藏」问题场景在阿里云上部署了一台服务器,CentOS6.8系统环境,安装了MySql+Nginx+Git+vsftpd等软件,在本地Linux终端以非root账户SSH远程登录服务器,在将项目打包发布时遇到如题所示问题。代码中配置文件里的用户名不是“root”,密码正确,且该用户名和密码是配置在服务端数据库的用户表中的。但是在用浏览器调用跟数据库交互接口时出错:尝试解决网上搜了一堆文章,主要集中在(1…

    2022年10月28日
  • bWAPP练习

    bWAPP练习简介虚拟机下载地址: https://www.vulnhub.com/entry/bwapp-bee-box-v16,53/如果你想自己去部署环境:https://sourceforge.net/projects/bwapp/files/bee-box/bWAPP包含有100多个漏洞,包括OWASPTop10安全风险,很爽的PHPweb靶机。登录username:bee pas…

  • win10系统无法识别usb大容量移动硬盘_电脑没有usb大容量存储设备选项

    win10系统无法识别usb大容量移动硬盘_电脑没有usb大容量存储设备选项WIN10突然不能使用USB大容量存储设备(移动硬盘)的解决方法昨天开始使用usb硬盘,发现一块无法识别,一块识别好了以后不能打开。可能是之前一次系统更新有bug,但是一直也没有用移动硬盘,所以没有发现。 开始尝试各种方案,已经尝试过并且无效的有以下几个:1,卸载usb驱动,重启后系统自动安装,没有用;2,驱动精灵,没有用;3,驱动人生,没有用;4,驱动禁用启用

  • 卸载pycharm重新安装_乌班图怎么下载pychsrm

    卸载pycharm重新安装_乌班图怎么下载pychsrmpycahrm安装首先要去pycharm的官方网站下载Linux版本的pycharm安装包。如果想要下载以前版本的pycharm可以登录下方的网站去下载。https://www.jetbrains.com/pycharm/download/other.html安装包下载完毕后应该是一个后缀为:.tar.gz的压缩文件。此处我将下载的安装包放到了Downloads目录下(放在哪里随意)…

  • oracle 创建用户进行登录

    oracle 创建用户进行登录oracle只有一个数据库叫orcl,ip地址数据库名称也叫sid:oracle帐号用户名密码示例帐号scott/tiger使用cmd打开doc窗口。输入sqlplus/nolog登录进去就是sys用户,管理system用户conn/assysdba让sys拥有dba权限修改system密码alterusersyst

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号