1、原理
mysql支持两种压缩模式:compressed和Transparent Page Compression【透明页压缩TPC 5.7】
-
开启compressed
CREATE TABLE t2 (c1 INT) row_format=compressed,key_block_size=8;
alter table t2 row_format=compressed,key_block_size=8;
-
开启TPC
CREATE TABLE t1 (c1 INT) COMPRESSION="zlib | lz4";
alter table t1 compression="zlib | lz4";
optimzie table t1;
-
禁用TPC
alter table t1 compression="none";
optimzie table t1;
zlib压缩比高但速度慢,测试5000w表需要30min
- compressed 需要配合innodb_file_format = Barracuda 否则压缩无效(不会报错,只有警告信息)
- compressed key_block_size只能指定为16的因数,如:4,8,16,默认是page_size的一半。数据的具体形式决定了压缩程度,通常会压缩50%以上。通过指定innodb_compression_level级别调整压缩比和cpu的开销(可调整到1~9,默认是6,级别越低压缩比越高CPU开销越大)
对于具有列值较长的表,使用compressed压缩表格式往往更高效 - TPC压缩利用文件系统‘打孔’技术,如果innodb_page_size = 16K,文件系统块大小为4K,则页面数据必须压缩到小于或等于12K才能进行‘打孔’
TPC压缩需要linux文件系统支持 hole punching功能(阿里云支持)
2、测试
传统压缩TPC压缩
线上应用表结构
MySQL存储空间使用量
网友评论