1. 决定压缩哪些对象通过sp_estimate_data_compression_savings 评估在ROW和PAGE压缩时分别节省的空间量。表包含如下数据模式时,会有较好的压缩效果:数字类型的列和固定长度的字符类型数据,但两者的大多数值都不会用到此类型的所有字节。如INT列 ...
1. 决定压缩哪些对象
通过sp_estimate_data_compression_savings 评估在ROW和PAGE压缩时分别节省的空间量。
表包含如下数据模式时,会有较好的压缩效果:
- 数字类型的列和固定长度的字符类型数据,但两者的大多数值都不会用到此类型的所有字节。如INT列的值大多数少于1000.
- 允许为NULL的列有很多NULL值
- 列值中有很多一样的值或者相同的前缀。
表包含如下数据模式时,压缩效果较差:
- 数字类型的列和固定长度的字符类型数据,但是两者的大多数值都会用尽此类型的所有字节。
- 非常少量的重复值
- 重复值不具有相同的前缀
- 数据存储在行外
- FILESTREAM数据
2. 评估应用负载模式
被压缩的页在磁盘和内存都是压缩的。下面两种情况下会被解压缩(不是整页解压缩,只解压缩相关的数据):
- 因为查询中的filtering, sorting, joining操作而被读取
- 被应用程序更新
解压缩会消耗CPU,但是数据压缩会减少物理IO和逻辑IO,同时会提高缓存效率。对于数据扫描操作,减少的IO量非常可观。对于单个的查找操作,减少的IO量较少。
行压缩导致的CPU开销通常不会超过10%。如果当前的系统资源充足,增加10%CPU毫无压力的话,建议所有的表都启用行压缩。
页压缩比行压缩的CPU开销高一些,所以确定是否使用页压缩会困难一些。可以通过一些简单的准则来帮助我们判断:
- 从那些不常用的表和索引开始
- 如果系统没有足够的CPU余量,不要使用页压缩
- 因为 filtering, joins, aggregates和sorting操作使用解压缩后的数据,所以数据压缩对这类查询没有太多帮助。如果工作负载主要由非常复杂的查询(多表JOIN,复杂聚合)组成,页压缩不会提高性能,最主要是节省存储空间。
- 大型数据仓库系统中,扫描性能是其重点,同时存储设备的成本较高,在CPU性能允许下,建议对所有表使用页压缩。
可以通过两个更细的度量值来帮我们评估使用何种数据压缩方式:
- U:特定对象(表、索引或者分区)的更新操作占所有操作的百分比。越低越适合页压缩。
- S:特定对象(表、索引或者分区)的扫描操作占所有操作的百分比。越高越适合页压缩。
通过如下脚本查询数据库所有对象的U:
SELECT o.name AS [Table_Name], x.name AS [Index_Name], i.partition_number AS [Partition], i.index_id AS [Index_ID], x.type_desc AS [Index_Type], i.leaf_update_count * 100.0 / (i.range_scan_count + i.leaf_insert_count + i.leaf_delete_count + i.leaf_update_count + i.leaf_page_merge_count + i.singleton_lookup_count ) AS [Percent_Update]FROM sys.dm_db_index_operational_stats (db_id(), NULL, NULL, NULL) iJOIN sys.objects o ON o.object_id = i.object_idJOIN sys.indexes x ON x.object_id = i.object_id AND x.index_id = i.index_idWHERE (i.range_scan_count + i.leaf_insert_count + i.leaf_delete_count + leaf_update_count + i.leaf_page_merge_count + i.singleton_lookup_count) != 0AND objectproperty(i.object_id,'IsUserTable') = 1ORDER BY [Percent_Update] ASC
海外公司注册、海外银行开户、跨境平台代入驻、VAT、EPR等知识和在线办理:https://www.xlkjsw.com
原标题:数据压缩 : 简要
关键词:
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:
admin#shaoqun.com
(#换成@)。