文档首页
MySQL 9.0 参考手册
相关文档 下载本手册
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
手册页 (TGZ) - 258.2Kb
手册页 (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


17.9.1.1 表压缩概述

由于处理器和缓存内存的速度比磁盘存储设备的速度提高得更快,许多工作负载都是 磁盘绑定。数据 压缩 使得数据库大小更小、I/O 减少、吞吐量提高,而仅需付出 CPU 利用率略有增加的代价。压缩对于读密集型应用程序特别有用,尤其是在具有足够 RAM 以将常用数据保存在内存中的系统上。

使用 ROW_FORMAT=COMPRESSED 创建的 InnoDB 表可以在磁盘上使用比配置的 innodb_page_size 值更小的 页大小。较小的页面需要更少的 I/O 来从磁盘读取和写入磁盘,这对于 SSD 设备特别有用。

压缩页面大小通过 CREATE TABLEALTER TABLE KEY_BLOCK_SIZE 参数指定。不同的页面大小要求表放在 每表文件 表空间或 通用表空间 中,而不是放在 系统表空间 中,因为系统表空间无法存储压缩表。有关更多信息,请参见 第 17.6.3.2 节,“每表文件表空间”第 17.6.3.3 节,“通用表空间”

无论 KEY_BLOCK_SIZE 值如何,压缩级别都是相同的。当您为 KEY_BLOCK_SIZE 指定更小的值时,您会获得越来越小的页面的 I/O 优势。但是,如果您指定的值太小,当数据值无法压缩到足以将多行放入每个页面时,就会有额外的开销来重新组织页面。对于表,KEY_BLOCK_SIZE 可以有多小的硬性限制,这取决于其每个索引的键列的长度。如果您指定的值太小,CREATE TABLEALTER TABLE 语句将失败。

在缓冲池中,压缩数据保存在小页面中,页面大小基于 KEY_BLOCK_SIZE 值。为了提取或更新列值,MySQL 还会在缓冲池中创建一个包含未压缩数据的未压缩页面。在缓冲池内,对未压缩页面的任何更新也会重新写入到等效的压缩页面。您可能需要调整缓冲池的大小以容纳压缩和未压缩页面的额外数据,尽管未压缩页面会在需要空间时从缓冲池中 逐出,然后在下一次访问时再次解压缩。