-
压缩表概述
表压缩可以在创建表时开启,压缩表能够使表中的数据以压缩格式存储,压缩能够显著提高原生性能和可伸缩性。压缩意味着在硬盘和内存之间传输的数据更小且占用相对少的内存及硬盘,对于辅助索引,这种压缩带来更加明显的好处,因为索引数据也被压缩了。压缩对于硬盘是SSD的存储设备尤为重要,因为它们相对普通的HDD硬盘比较贵且容量有限。
我们都知道,CPU和内存的速度远远大于磁盘,因为对于数据库服务器,磁盘IO可能会成为紧要资源或者瓶颈。数据压缩能够让数据库变得更小,从而减少磁盘的I/O,还能提高系统吞吐量,以很小的成本(耗费较多的CPU资源)。对于读比重比较多的应用,压缩是特别有用。压缩能够让系统拥有足够的内存来存储热数据。 -
压缩条件:
第一,mysql的版本需要大于5.5
第二,设置innodb_file_format=barracuda
第三,create table或者alter talble 增加 ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8;(默认的key_block_size=16) -
参数配置说明:
下面是针对写密集的应用,设置压缩表的一些有用参数:
• innodb_compression_level:决定压缩程度的参数,如果你设置比较大,那么压缩比较多,耗费的CPU资源也较多;相反,如果设置较小的值,那么CPU占用少。默认值6,可以设置0-9
• innodb_compression_failure_threshold_pct:默认值5,范围0到100.设置中断点避免高昂的压缩失败率。
• innodb_compression_pad_pct_max:指定在每个压缩页面可以作为空闲空间的最大比例,该参数仅仅应用在设置了innodb_compression_failure_threshold_pct不为零情况下,并且压缩失败率通过了中断点。默认值50,可以设置范围是0到75 -
压缩实例测试:
4.1 参数说明:
Mysql配置文件my.cnf参数:
innodb_compression_level=6
innodb_compression_failure_threshold_pct=5
innodb_compression_pad_pct_max=50
操作系统参数:
系统内存:16G
Cup:4核
数据库文件大小:
数据表:0.93G
压缩语句:alter table dr_ld_202003 row_format=compressed key_block_size=8
4.2压缩过程
内存占用8.6%,cup占用33%;压缩消耗时间为:6分钟;如图1为压缩过程中的系统使用情况;图2为日常mysql使用的系统占用情况:
图1
图2
5. 压缩后存储情况
压缩前数据表的存储:
压缩后数据表的存储:
- 压缩与未压缩表查询情况对比
(1)查询未压缩表的时,内存、cup和查询时间情况
查询语句:select * from dr_ld_hour_202003 where data_time between ‘2020-03-01’ and ‘2020-03-30’ order by data_time desc
数据范围 内存 CPU 所需时长(s) 图例
图1
图2
图3