10bet网址
MySQL 5.7参考手册
相关的文档10bet官方网站 本手册下载
PDF (Ltr)- 36.5 mb
PDF (A4)- 36.6 mb
手册页(TGZ)- 238.3 kb
手册页(邮政编码)- 349.9 kb
信息(Gzip)- 3.4 mb
信息(邮政编码)- 3.4 mb
本手册节选

14.9.2 InnoDB页面压缩

InnoDB中驻留的表支持页级压缩file-per-table表空间。这个特性被称为透明页面压缩.参数来启用页压缩压缩属性与创建表ALTER TABLE.支持的压缩算法包括Zlib而且LZ4

支持的平台上

页面压缩需要稀疏文件和孔冲孔支持。在使用NTFS的Windows和以下mysql支持的Linux平台上支持页面压缩,其中内核级提供穿孔支持:

  • RHEL 7和使用内核版本3.10.0-123或更高版本的派生发行版

  • OEL 5.10 (UEK2)内核版本2.6.39或更高

  • OEL 6.5 (UEK3)内核版本3.8.13或更高

  • OEL 7.0内核版本3.8.13或更高

  • SLE11内核版本3.0-x

  • SLE12内核版本3.12-x

  • OES11内核版本3.0-x

  • Ubuntu 14.0.4 LTS内核版本3.13或更高

  • Ubuntu 12.0.4 LTS内核版本3.2或更高

  • Debian 7内核版本3.2或更高

请注意

给定Linux发行版的所有可用文件系统可能都不支持打孔。

页面压缩的工作原理

当写入一个页面时,将使用指定的压缩算法对其进行压缩。压缩后的数据被写入磁盘,在磁盘上穿孔机制从页尾释放空块。如果压缩失败,数据将被原样写入。

Linux上的打孔器大小

在Linux系统上,文件系统块大小是用于打孔的单位大小。因此,只有当页数据可以压缩到小于或等于的大小时,页压缩才有效InnoDB页面大小减去文件系统块大小。例如,如果innodb_page_size = 16 k当文件系统块大小为4K时,页面数据必须压缩到小于等于12K,才能使打孔成为可能。

窗户上的打孔器尺寸

在Windows系统上,稀疏文件的底层基础结构基于NTFS压缩。打孔尺寸为NTFS压缩单元,是NTFS簇尺寸的16倍。集群大小及其压缩单位如下表所示:

表14.8 Windows NTFS集群大小和压缩单元

集群规模 压缩机组
512个字节 8 KB
1 KB 16 KB
2 KB 32 KB
4 KB 64 KB

只有当页数据可以压缩到小于或等于的大小时,Windows系统上的页压缩才有效InnoDB页面大小减去压缩单元大小。

默认的NTFS集群大小为4KB,压缩单元大小为64KB。这意味着页面压缩对于开箱即用的Windows NTFS配置没有任何好处innodb_page_size也是64 kb。

要使页面压缩在Windows上工作,必须用小于4K的集群大小创建文件系统innodb_page_size必须至少是压缩单元大小的两倍。例如,要在Windows上进行页面压缩,可以构建集群大小为512字节(压缩单位为8KB)的文件系统并进行初始化InnoDB与一个innodb_page_size16K或更大的值。

使页面压缩

要启用页压缩,请指定压缩属性创建表声明。例如:

CREATE TABLE t1 (c1 INT) COMPRESSION="zlib";

控件中还可以启用页压缩ALTER TABLE声明。然而,ALTER TABLE……压缩只更新表空间压缩属性。在设置新的压缩算法之后对表空间的写入使用新的设置,但要将新的压缩算法应用于现有页,必须使用重新构建表优化表

ALTER TABLE t1 COMPRESSION="zlib";优化表t1;

禁用页面压缩

若要禁用页面压缩,请设置压缩=没有使用ALTER TABLE.写入设置后发生的表空间压缩=没有不再使用页面压缩。要解压缩现有页,必须使用优化表设置后压缩=没有

ALTER TABLE t1 COMPRESSION="None";优化表t1;

页面元数据压缩

页压缩元数据可以在INFORMATION_SCHEMA。INNODB_SYS_TABLESPACES表,在以下列:

  • FS_BLOCK_SIZE:文件系统块大小,即打孔时使用的单位大小。

  • FILE_SIZE:文件的表观大小,表示未压缩时文件的最大大小。

  • ALLOCATED_SIZE:文件的实际大小,即磁盘上分配的空间大小。

请注意

在类unix系统上,ls - ltablespace_name.ibd显示明显的文件大小(相当于FILE_SIZE在字节。查看磁盘上实际分配的空间量(相当于ALLOCATED_SIZE),使用栋du - = 1tablespace_name.ibd.的——块= 1选项以字节而不是块的形式打印分配的空间,以便与之进行比较ls - l输出。

使用显示创建表要查看当前页面压缩设置(ZlibLz4,或没有一个).一个表可以混合包含具有不同压缩设置的页面。

类中检索employees表的页压缩元数据INFORMATION_SCHEMA。INNODB_SYS_TABLESPACES表格

Create table employees (emp_no INT NOT NULL, birth_date DATE NOT NULL, first_name VARCHAR(14) NOT NULL, last_name VARCHAR(16) NOT NULL,性别ENUM ('M','F') NOT NULL, hire_date DATE NOT NULL, PRIMARY KEY (emp_no)) compression =" Zlib ";#在INFORMATION_SCHEMA中查询页面压缩元数据。INNODB_SYS_TABLESPACESmysql> SELECT SPACE, NAME, FS_BLOCK_SIZE, FILE_SIZE, ALLOCATED_SIZE FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES WHERE NAME='employees/employees'\G *************************** 1. row *************************** SPACE: 45 NAME: employees/employees FS_BLOCK_SIZE: 4096 FILE_SIZE: 23068672 ALLOCATED_SIZE: 19415040

employees表的页面压缩元数据显示,表观文件大小为23068672字节,而实际文件大小(使用页面压缩)为19415040字节。文件系统块大小为4096字节,这是打孔时使用的块大小。

使用页压缩识别表

为标识启用了页压缩的表,可以查询INFORMATION_SCHEMA。表CREATE_OPTIONS类定义的表的压缩属性:

mysql> SELECT TABLE_NAME, TABLE_SCHEMA, CREATE_OPTIONS FROM INFORMATION_SCHEMA。表中create_options如'% compression =%';+------------+--------------+--------------------+ | TABLE_NAME | TABLE_SCHEMA | CREATE_OPTIONS  | +------------+--------------+--------------------+ | 员工测试| | zlib压缩=” " | +------------+--------------+--------------------+

显示创建表也显示了压缩属性,如果使用。

页面压缩限制和使用说明

  • 如果文件系统块大小(或Windows上的压缩单元大小)* 2 >,则页面压缩将被禁用innodb_page_size

  • 对于位于共享表空间中的表(包括系统表空间、临时表空间和通用表空间),不支持页面压缩。

  • undo日志表空间不支持页面压缩。

  • 重做日志页不支持页压缩。

  • 用于空间索引的r -树页面没有被压缩。

  • 属于压缩表的页(ROW_FORMAT =压缩)都保持原样。

  • 在恢复期间,更新的页面将以未压缩的形式写入。

  • 在不支持所使用的压缩算法的服务器上加载页面压缩表空间会导致I/O错误。

  • 在降级到不支持页面压缩的MySQL早期版本之前,请先解压使用页面压缩特性的表。要解压表,运行ALTER TABLE……压缩=没有而且优化表

  • 如果使用的压缩算法在Linux和Windows服务器上都可用,则可以在Linux和Windows服务器之间复制页压缩表空间。

  • 当将页面压缩表空间文件从一个主机移动到另一个主机时,保持页面压缩需要一个保持稀疏文件的实用程序。

  • 在使用NVMFS的Fusion-io硬件上可能比在其他平台上获得更好的页面压缩,因为NVMFS的设计目的是利用冲孔功能。

  • 使用页面压缩功能InnoDB页面大小和相对较小的文件系统块大小可能导致写放大。例如,最大值InnoDB64KB的页面大小和4KB的文件系统块大小可以改善压缩,但也可能增加对缓冲池的需求,导致增加I/O和潜在的写放大。