SQL Server 2008 压缩

进行SQL查询时,紧要的多少个瓶颈在于:CPU运算速度、内存缓存区大小、磁盘IO速度。而对此大数据量数据的询问,其瓶颈则相似集中于磁盘IO,以及内存缓存。那么为了拉长SQL查询的功效,一方面大家须求考虑尽量裁减查询设计的多寡条目数——建立目录,设立分区;另一方面,我们也得以设想现实收缩数据表物理大小,从而裁减IO大小。在SQL
Server
2008中,最新提供了一项功用“压缩(Compression)”,就是用来减弱数据表、索引物理大小。
安装压缩
在商店管理器中,在急需减小的表或索引上右键拔取Storage-》Manage
Compression:

SQL Server 1

此间能够看看几点:
  1.
人间列表里列出了该表所有的分区,也就是足以一如既往张表的不等分区应用不一致的削减策略。
  2. 减去格局(Compression Type)分为Row和Page二种。
行级压缩(Row):
     
一方面收缩了动态长度字段元数据的大大小小(varchar、varbinary等),比如事先存储字段实际尺寸须求2bytes,压缩后只须求3bits。
     
另一方面也直接压缩各字段存储内容的大小,比如存储数值1在一个int类型字段中,压缩后只占用了一个字节。
页级压缩(Page):能在各行间共享相同的数码,那之中包含两项技术:列前缀(Column
Prefix)、页字典(Page Dictionary)。
     
列前缀可以让具备相同前缀的字段值拥有类似外键一样的构造来储存相同的前缀和各自的其他部分。
页字典则可以将在选取列前缀基础上的其他部分再一次集结存储,比如同样是一张存储了一个网站有着页面URL的表,要是有在表里里有多条URL字段的值相同,比如
‘1a.html’,‘1b.html’,‘1c.html’,‘1b.html’,‘1a.html’,‘1a.html’,则经过页字典技术压缩后,实际存储在字段中的值会进一步压缩为2,3,1c.html(没有重新的字段值不会被减去),‘3’,‘2’,‘2’。

3.
点击“总计”后,会总括出表当前占据的空中大小,以及减弱须要的空间尺寸。注意那里与一般预料的不比,倘使要对一张预存有多少但绝非压缩的表举办压缩,首先需求的是外加的半空中大小。
进行压缩
设置好之后,就足以采取是生成脚本如故马上执行,一般减去的实施时间受表原有数据多少以及拔取压缩形式的震慑。小编对一张有上千万条记下的表做页级压缩,耗时在10分钟左右。
减掉完结未来查看数据库大小,会发觉数据库的尺寸变大了!那也和在装置阶段总计出来的附加空间相关。但实际那里大多数上空是预占的长空,并没有实际数目。要是急需节约磁盘空间,须要更为履行缩短(Shrink)操作。
与Compression差距,Shrink用来刑释解教数据库占据的从未有过行使的上空,一般用来对无用的日志文件收缩(要是操作频仍,日志文件很有可能超乎数据库实际数据的大大小小)。那里我们对数据库文件(mdf)做Shrink操作,已毕之后再看数据库的尺寸,果然裁减了成百上千。作者做缩减、Shrink之后,一般都能将数据库的轻重减为原来的1/3~1/2左右。当然,具体压缩比率取决于压缩形式、压缩表的字段特点、压缩表占总体数据库数据的比重等。
注意事项
  1.
既然对表行了压缩,那么在实践查询时肯定会有解压缩的历程。而这一历程会占据CPU时间,也就是大家在通过削减裁减了磁盘占用空间以及IO时间的还要,增大了CPU的开支。所以在缩减前必要考虑清楚查询的瓶颈到底是磁盘IO仍旧内存如故CPU。而且尽管表应用了减弱,类似建立目录,对于增删改等操作也会有必然的震慑。所以同样要考虑动用在表上的操作到底以哪一种为主。
SQL Server,  2.
各页面的压缩是独自举办的,页字典和列前缀也分别存储于各页内。而且收缩仅在数据页快满的时候进行,因为一个页的轻重是稳定的,压缩半页不会有品质上的进步。
  3. 数据库备份中也有Compression
的选项,但那利用的是系统的文书裁减技术,而且只好选择于全体数据库上。
  4.
便于被忽视的是,索引也能被收缩,而且和表压缩独立,同样也会升级所有应用到目录的查询的属性。
  5.
在Shrink阶段,可能会招致大气的目录碎片,所以能够在Shrink完成未来重建或者重社团索引,但与此同时,这个操作也会造成数据库的体积变大……也就是,最小的数据库体积和微小碎片比率的目录是鱼与熊掌,不可兼得。

相关文章