表数据压缩

对于行存储的表和索引,使用数据压缩功能可帮助减小数据库的大小。 除了节省空间之外,数据压缩还可以帮助提高 I/O 密集型工作负荷的性能,因为数据存储在更少的页中,查询需要从磁盘读取的页更少。 但是,在与应用程序交换数据时,在数据库服务器上需要额外的 CPU 资源来压缩和解压缩数据

1,在表的storage 选项卡查看表的存储属性

2,sp_estimate_data_compression_savings 估算压缩的效果

使用 sp_estimate_data_compression_savings 估算对表或分区启用行压缩或页压缩时可能带来的节省量。

EXEC SYS.sp_estimate_data_compression_savings

       @SCHEMA_NAME=‘dbo‘,

       @OBJECT_NAME=‘table_name‘,

       @INDEX_ID=NULL,

       @PARTITION_NUMBER=NULL,

       @DATA_COMPRESSION=‘ROW‘

3, 压缩存在额外的开销

当最大行大小加上压缩开销超过最大行大小 8060 个字节时,不能对表启用压缩功能。例如,不能压缩具有 c1 char(8000) 和 c2 char(53) 列的表,因为存在额外的压缩开销

4,Row 压缩的实现

启用行压缩只会更改与数据类型相关联的数据的物理存储格式,而不会更改其语法或语义。当对一个或多个表启用压缩时,不需要更改应用程序。 新的记录存储格式主要有以下更改:

  • 减少了与记录相关联的元数据开销。此元数据为有关列、列长度和偏移量的信息。 在某些情况下,元数据开销可能大于旧的存储格式。
  • 它对于数值类型(例如,integer、decimal 和 float)和基于数值的类型(例如,datetime 和 money)使用可变长度存储格式。
  • 它通过使用不存储空字符的可变长度格式来存储定长字符串。

  注意:将对所有数据类型的 NULL 和 0 值进行优化,从而使它们不占用任何字节。

实现的原理,通俗解释是通过修改物理存储格式,达到压缩数据的目的,但是物理存储格式的修改不会影响该字段使用的语法,例如:

  • 对于数值类型和基于数值的类型来说,数据类型的长度是一定的,如BIGINT占用8个字节,但对于值1来说,只需要一个字节便可以存放,启用行压缩便可以节省7个字节的空间;
  • 对于定长字符串类型,如果存放的数据未达到指定长度,会补空字符来填满,如类型CHAR(200)用来存放字符串"1"会花费200个字节,但启用行压缩后,会将填充的空字符移除,只需要1个字节便可以存放。
  • 对于类型bit来说,除自身消耗的空间外,还需要额外的4个bit来存放元数据,因此也可以从行压缩中获益。

5,Page 压缩的实现

页压缩包含行压缩,以及前缀压缩和字典压缩,当使用页压缩时,将仅使用行压缩来压缩索引的非叶级别页.

6,通过ssms对表开启压缩功能

通过表的存储来Manage Compression,select compression type

7,写脚本对表开启压缩功能

可以预先评估一下压缩的数据量的大小,然后再进行压缩

EXEC sp_estimate_data_compression_savings
    @schema_name = ‘dbo‘,
    @object_name = ‘hierarchy‘,
    @index_id = null,
    @partition_number = NULL,
    @data_compression = ‘row‘ ; 
ALTER TABLE [dbo].[hierarchy] REBUILD PARTITION = ALL
WITH (DATA_COMPRESSION = ROW )

8,对索引开启page压缩功能

SELECT name, index_id
FROM sys.indexes
WHERE OBJECT_NAME (object_id) = N‘TransactionHistory‘;

EXEC sp_estimate_data_compression_savings
    @schema_name = ‘Production‘,
    @object_name = ‘TransactionHistory‘,
    @index_id = 2,
    @partition_number = NULL,
    @data_compression = ‘PAGE‘ ; 

ALTER INDEX IX_TransactionHistory_ProductID ON Production.TransactionHistory REBUILD PARTITION = ALL WITH (DATA_COMPRESSION = PAGE);
GO
时间: 2024-11-05 22:06:25

表数据压缩的相关文章

让你提前认识软件开发(34):数据库的维护

第2部分 数据库SQL语言 数据库的维护 对于某些大型软件产品,一旦商用,必定会存储非常多用户信息,这就对产品所使用的数据库(下面简称业务数据库)带来了压力.为了保证业务数据库的平稳执行,须要在日常工作中对数据库做一些主要的维护操作. 业务数据库的维护规则例如以下: 1. 对业务数据库必须进行定期全量备份 业务数据库的定期备份能在数据库被意外破坏时进行高速恢复,备份策略能够依据数据增量大小採用周计划或月计划. 假如备份数据库db_100,则Oracle.Sybase和SQL Server中的操作

从损坏的wt文件中恢复出WiredTiger集合

Reference: http://dev.guanghe.tv/2016/06/recovering-a-wiredtiger-collection-from-a-corrupt-wt-file.html 常在河边走,哪能不湿鞋.虽然说只要不使用kill -9杀进程,一般不会导致MongoDB出问题(Mongo本身有对kill做处理),但是程序总有跑偏的时候,也许哪次服务器重启或者遇到断电之类的,没准就会导致数据库文件损坏. 当然一般的异常关闭后启动不了时可能也就是删除一下lock.pid文件

HBase核心技术点

表的rowkey设计核心思想: 依据rowkey查询最快 对rowkey进行范围查询range 前缀匹配 预分区创建的三种方式 create 'ns1:t1', 'f1', SPLITS => ['10', '20', '30', '40'] create 't1', 'f1', SPLITS => ['10', '20', '30', '40'] create 't1', 'f1', SPLITS_FILE => '/home/hadoop/data/splits.txt', OWNE

数据库的性能优化的一些思考

1,服务器目前的架构 cpu 内存 io 网络 一主 -> 多从(14) 主服务器宕机 切换从服务器慢 监控指标 :qps和tps (慢sql占用cpu时间太长,每个sql只能是一个cpu执行,qps超高造成阻塞) 并发量和cpu使用率 (连接数被占满,cpu资源耗尽出现宕机) 磁盘IO 网卡IO 大表(千万行数据,文件10g数据,查询条件复杂) 查询慢容易产生慢sql,产生大量的磁盘IO,更改列会很慢,建立索引时间长,主从延迟大 ddl操作会长时间锁表,造成主从延迟,正常数据会被阻塞,大量的链

Web---HTTP请求、重定向、转发和数据压缩

HTTP常用的请求方式包括: GET-最为常见,但发送的数据量很小,发送的数据直接包含到url的后面. POST-可以包含大量数据,数据在请求正文中通过表单进行提交. HEAD,PUT,DELETE. 后面三种Tomcat服务器默认都不支持.常用的只有前两种. GET: 发送到服务器的数据出现在URL的后面.最多不能超过1K.如: http://localhost:8080/index.jsp?name=itcast&sex=man&.. POST: 发送到服务器的数据会出现有请求的正文部

数据压缩简要

1. 决定压缩哪些对象 通过sp_estimate_data_compression_savings 评估在ROW和PAGE压缩时分别节省的空间量. 表包含如下数据模式时,会有较好的压缩效果: 数字类型的列和固定长度的字符类型数据,但两者的大多数值都不会用到此类型的所有字节.如INT列的值大多数少于1000. 允许为NULL的列有很多NULL值 列值中有很多一样的值或者相同的前缀. 表包含如下数据模式时,压缩效果较差: 数字类型的列和固定长度的字符类型数据,但是两者的大多数值都会用尽此类型的所有

优化系列 | InnoDB引擎数据表压缩特性测试

一.前言Innodb Plugin引擎开始引入多种格式的行存储机制,目前支持:Antelope.Barracuda两种.其中Barracuda兼容Antelope格式.另外,Innodb plugin还支持行数据压缩特性,不过前提是采用Barracuda行存储格式.表空间启用压缩的前提是innodb表空间文件存储格式修改成:Barracuda,需要修改2个选项:innodb_file_format = "Barracuda"innodb_file_format_max = "

oracle 11G表压缩

最近一套生产库表空间一直告警在90%以上,但的磁盘硬件资源又不足,整个库已经达到26T.库里存储了近4年的数据,与业务沟通说历史数据基本上不会做操作,但是又不能归档,所以想到了压缩表来节省表空间. 随着数据库的增长,我们可以考虑使用oracle的表压缩技术.表压缩可以节省磁盘空间.减少data buffer cache的内存使用量.并可以显著的提升读取和查询的速度.当使用压缩时,在数据导入和DML操作时,将导致更多的CPU开销,然而,由于启用压缩而减少的I/O需求将抵消CPU的开销而产生的成本.

HBase(八): 表结构设计优化

在 HBase(六): HBase体系结构剖析(上) 介绍过,Hbase创建表时,只需指定表名和至少一个列族,基于HBase表结构的设计优化主要是基于列族级别的属性配置,如下图: 目录: BLOOMFILTER BLOCKSIZE IN_MEMORY COMPRESSION/ENCODING VERSIONS TTL BLOOMFILTER: Bloom Filter是由Bloom在1970年提出的一种多哈希函数映射的快速查找算法.通常应用在一些需要快速判断某个元素是否属于集合,但是并不严格要求