14.9.1.6 OLTP 工作负载的压缩

传统上,推荐InnoDB compression功能主要用于只读或只读workloads,例如在data warehouse配置中。 SSD存储设备的兴起,它们快速但相对较小且昂贵,使得压缩也对OLTP工作负载具有吸引力:高流量的交互式网站可以通过使用压缩 table 来降低其存储需求和每秒的 I/O 操作(IOPS)与频繁执行INSERTUPDATEDELETE操作的应用程序。

MySQL 5.6 中引入的配置选项使您可以调整特定 MySQL 实例压缩的工作方式,重点是写密集型操作的性能和可伸缩性:

  • innodb_compression_level可让您提高或降低压缩程度。较高的值可让您将更多数据容纳到存储设备上,但以压缩期间更多的 CPU 开销为代价。较低的值可以在存储空间不是很关键的情况下减少 CPU 开销,或者您希望数据不是特别可压缩的。

  • innodb_compression_failure_threshold_pct为更新压缩 table 期间的compression failures指定一个截止点。超过此阈值后,MySQL 开始在每个新的压缩页面中保留额外的可用空间,从而动态调整可用空间量,直到innodb_compression_pad_pct_max指定的页面大小百分比

  • innodb_compression_pad_pct_max可让您调整每个page内保留的最大空间,以记录对压缩行的更改,而无需再次压缩整个页面。值越高,无需重新压缩页面即可记录更多更改。只有在运行时指定百分比的压缩操作“ fail”,MySQL 才需要为每个压缩 table 中的页面使用可变数量的可用空间,这需要昂贵的操作来拆分压缩页面。

  • innodb_log_compressed_pages可让您禁止将re-compressed pages的图像写入redo log。对压缩数据进行更改时,可能会发生重新压缩。默认情况下启用此选项,以防止在恢复过程中使用不同版本的zlib压缩算法时可能发生的损坏。如果确定zlib版本不会更改,请禁用innodb_log_compressed_pages以减少修改压缩数据的工作负载的重做日志生成。

因为处理压缩数据有时涉及同时将页面的压缩版本和未压缩版本同时保留在内存中,所以在将压缩与 OLTP 风格的工作负载一起使用时,请准备增加innodb_buffer_pool_size配置选项的值。