MySQL 行格式压缩效果及性能影响测试

MySQL InnoDB表支持行格式压缩,压缩后的表能够显著减少磁盘空间占用,但是压缩功能也会造成一定的性能损耗,比如加重CPU的负载,降低数据库吞吐量。本文通过测试案例,来具体了解MySQL InnoDB行格式压缩的效果以及对性能的影响。

  • MySQL版本:5.7.19
  • 测试工具:sysbench,10张表,单张表1000w数据,32线程并发
  • 测试场景:read_only,write_only,read_write

行格式压缩语法:
ALTER TABLE sbtest1 ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8;

1. 压缩效果测试

sysbench生成10张表,每张表1000w条记录,对比压缩前后,这10张表的磁盘占用大小。

压缩前:23G
压缩后:16G

压缩之后,磁盘占用降低了30%左右。

2. CPU负载测试

测试场景 cpu负载 cpu占用百分比
read_only(未压缩) 0.49 25%
read_only(压缩) 1.28 30%
write_only(未压缩) 2.93 29%
write_only(压缩) 4.87 72%
read_write(未压缩) 1.65 32%
read_write(压缩) 2.49 60%

从以上测试结果可以看出,压缩对cpu的影响较大,尤其是写入场景,cpu负载和cpu占用百分比增长了1倍以上。

3. 读写性能测试

测试场景 tps qps min(ms) agv(ms) max(ms) 95%(ms)
read_only(未压缩) 1221.55 19544.74 23.01 26.19 429.10 28.16
read_only(压缩) 1134.81 18156.96 23.33 28.19 845.78 30.26
write_only(未压缩) 2688.26 16129.56 8.23 11.90 415.46 19.29
write_only(压缩) 1166.50 6998.99 10.46 27.43 629.40 44.98
read_write(未压缩) 892.68 17853.53 28.71 35.84 439.47 46.63
read_write(压缩) 634.78 12695.65 32.87 50.41 876.79 64.47

从以上测试结果可以看出,压缩对数据库tps,qps和响应时间产生较大影响,尤其是写入场景,tps,qps 降低明显,而对于只读场景,影响较小。

4. 总结:

  1. 行格式压缩能够明显减少磁盘空间占用,从测试结果来看,降低了30%左右,而在实际业务场景中,如果业务表含有大量字符串字段,那么压缩效果将会更加显著。
  2. 数据压缩在减少磁盘空间占用的同时,也会带来一些负作用,使得cpu负载和cpu使用率明显增加。
  3. 压缩功能会影响数据库性能,从测试结果上来看,对于写入场景的影响要明显大于只读场景。

发表评论