mysql页压缩_mysql8 参考手册--InnoDB页面压缩

InnoDB支持驻留在每个表文件表 空间中的表的页面级压缩 。此功能称为透明页面压缩。通过COMPRESSION使用CREATE TABLE或 指定属性 来启用页面压缩ALTER TABLE。支持的压缩算法包括Zlib和 LZ4。

页面压缩需要稀疏文件和打孔(hole punching)支持。具有NTFS的Windows和以下MySQL支持的Linux平台支持页面压缩,其中内核级提供了穿孔(hole punching)支持:

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

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发行版的所有可用文件系统可能不支持打孔(hole punching)。

页面压缩如何工作

写入页面时,将使用指定的压缩算法对其进行压缩。压缩后的数据被写入磁盘,其中打孔机制从页面末尾释放空块。如果压缩失败,则按原样写出数据。

Linux上的打孔尺寸

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

Windows上的打孔尺寸

在Windows系统上,稀疏文件的基础结构基于NTFS压缩。打孔大小是NTFS压缩单位,是NTFS群集大小的16倍。下表显示了群集大小及其压缩单位:

表15.14 Windows NTFS群集大小和压缩单位

簇的大小 压缩单元

512字节 8 KB

1 KB 16 KB

2 KB 32 KB

4 KB 64 KB

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

默认的NTFS群集大小为4KB,其压缩单位大小为64KB。这意味着页面压缩对于现成的Windows NTFS配置没有任何好处,因为最大配置 innodb_page_size也是64KB。

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

启用页面压缩

要启用页面压缩,请COMPRESSION在CREATE TABLE语句中指定 属性 。例如:

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

您还可以在ALTER TABLE语句中启用页面压缩 。但是, ALTER TABLE ... COMPRESSION仅更新表空间压缩属性。使用新设置写入设置了新压缩算法后发生的表空间,但是要将新压缩算法应用于现有页面,必须使用重建表OPTIMIZE TABLE。

ALTER TABLE t1 COMPRESSION="zlib";

OPTIMIZE TABLE t1;

禁用页面压缩

要禁用页面压缩,请COMPRESSION=None使用 设置 ALTER TABLE。写入设置后COMPRESSION=None不再使用页面压缩的表空间 。要解压缩现有页面,必须在OPTIMIZE TABLEafter之后使用重建表COMPRESSION=None。

ALTER TABLE t1 COMPRESSION="None";

OPTIMIZE TABLE t1;

页面压缩元数据

在INFORMATION_SCHEMA.INNODB_TABLESPACES 表的以下列中找到页面压缩元数据 :

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

FILE_SIZE:文件的视在大小,代表未压缩的文件的最大大小。

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

注意

在类Unix系统上,以字节为单位显示表观文件大小(等于 )。要查看磁盘上实际分配的空间量(等于 ),请使用。该 选项以字节而不是块为单位打印分配的空间,以便可以将其与输出进行比较 。 ls -l tablespace_name.ibdFILE_SIZEALLOCATED_SIZEdu --block-size=1 tablespace_name.ibd--block-size=1ls -l

使用SHOW CREATE TABLE查看当前页面压缩设置(Zlib, Lz4,或None)。一个表可能包含具有不同压缩设置的页面混合。

在以下示例中,从 INFORMATION_SCHEMA.INNODB_TABLESPACES表中检索了employees表的页面压缩元数据 :

# Create the employees table with Zlib page compression

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,

gender ENUM ('M','F') NOT NULL,

hire_date DATE NOT NULL,

PRIMARY KEY (emp_no)

) COMPRESSION="zlib";

# Insert data (not shown)

# Query page compression metadata in INFORMATION_SCHEMA.INNODB_TABLESPACES

mysql> SELECT SPACE, NAME, FS_BLOCK_SIZE, FILE_SIZE, ALLOCATED_SIZE FROM

INFORMATION_SCHEMA.INNODB_TABLESPACES WHERE NAME='employees/employees'\G

*************************** 1. row ***************************

SPACE: 45

NAME: employees/employees

FS_BLOCK_SIZE: 4096

FILE_SIZE: 23068672

ALLOCATED_SIZE: 19415040

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

使用页面压缩识别表

要标识启用了页面压缩的表,您可以查询该列中使用属性定义的表: INFORMATION_SCHEMA.TABLES CREATE_OPTIONSCOMPRESSION

mysql> SELECT TABLE_NAME, TABLE_SCHEMA, CREATE_OPTIONS FROM INFORMATION_SCHEMA.TABLES

WHERE CREATE_OPTIONS LIKE '%COMPRESSION=%';

+------------+--------------+--------------------+

| TABLE_NAME | TABLE_SCHEMA | CREATE_OPTIONS |

+------------+--------------+--------------------+

| employees | test | COMPRESSION="zlib" |

+------------+--------------+--------------------+

如果使用SHOW CREATE TABLE,还显示COMPRESSION属性。

页面压缩限制和使用说明

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

驻留在共享表空间中的表不支持页面压缩,共享表空间包括系统表空间,临时表空间和常规表空间。

撤消日志表空间不支持页面压缩。

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

用于空间索引的R树页面未压缩。

属于压缩表(ROW_FORMAT=COMPRESSED)的页面保持不变。

在恢复过程中,更新后的页面以未压缩的形式写出。

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

在降级到不支持页面压缩的MySQL的早期版本之前,请解压缩使用页面压缩功能的表。要解压缩表,请运行 ALTER TABLE ... COMPRESSION=None和OPTIMIZE TABLE。

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

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

具有NVMFS的Fusion-io硬件上的页面压缩比其他平台上可以实现更好的页面压缩,因为NVMFS旨在利用打孔功能。

使用具有大InnoDB页面大小和相对较小文件系统块大小的页面压缩功能 可能会导致写入放大。例如,InnoDB具有4KB文件系统块大小的最大页面大小为64KB可能会改善压缩效果,但也可能会增加对缓冲池的需求,从而导致I / O增加和潜在的写入放大。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值