压缩目的:
在IO密集型应用场景下,CPU比较空闲,对数据进行压缩来节约存储资源的一种方式;
什么样的数据适合压缩:
字符串适合压缩,图片,二进制,视频等不适合压缩;
操作步骤:
1, 确保版本高于v5.1;
2, innodb_file_per_table =1
3, innodb_file_format = Barracuda
4, 建表的时候加入 row_format=compressed key_block_size=8;
5, 如果对历史归档表压缩,ALTER TABLE tb_name ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8;
key_block_size 表示每个块的大小,默认8,可以根据需要给1/2/4/8/16 ,如果想要最优的值可以按照不同的值写一定数据量进行测试;
压缩影响:
1, 查看历史CPU使用率,如果使用率较高不建议启用压缩;毕竟计算资源还是比存储资源昂贵的;
2, 如果是大的历史表压缩,会耗费较长时间,从而造成主从延时,具体延时时间按照数据量的多少而定;线上业务操作的时候尤其注意安全第一,避免对业务造成影响;
实测物理机对1T的表进行压缩,执行耗时22小时;
压缩率:
不同的数据压缩率不一样,我这边的数据压缩供参考:
压缩前:
16K table_compress_table.frm
1.1T table_compress_table.ibd
+----------------+----------------------------------------+-----------+------------+---------+------------+
| TABLE_SCHEMA | TABLE_NAME | data_size | index_size | free_MB | TABLE_ROWS |
+----------------+----------------------------------------+-----------+------------+---------+------------+
| task_component | table_compress_table | 460.83GB | 522.36GB | 4.00MB | 4439494908 |
+----------------+----------------------------------------+-----------+------------+---------+------------+
压缩后:
16K table_compress_table.frm
433G table_compress_table.ibd
+----------------+----------------------------------------+-----------+------------+---------+------------+
| TABLE_SCHEMA | TABLE_NAME | data_size | index_size | free_MB | TABLE_ROWS |
+----------------+----------------------------------------+-----------+------------+---------+------------+
| task_component | table_compress_table | 226.93GB | 197.75GB | 2.00MB | 4790999032 |
+----------------+----------------------------------------+-----------+------------+---------+------------+