【MySQL精通之路】InnoDB(9)-表和页压缩(2)-页压缩

news/2024/9/23 10:24:53/

目录

1.支持的平台

2.页面压缩的工作原理

3.启用页面压缩

4.禁用页面压缩

5.页面压缩-元数据

6.使用页面压缩识别表

 7.页面压缩限制和使用说明


InnoDB支持对驻留在FPT表空间中的表进行页面级压缩

此功能被称为透明页面压缩。通过使用CREATE TABLE或ALTER TABLE指定COMPRESSION 属性来启用页面压缩。支持的压缩算法包括ZlibLZ4


1.支持的平台

页面压缩需要稀疏文件打孔支持。使用NTFSWindows以及以下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发行版的所有可用文件系统可能都不支持打孔

博主补充:

你可以这么理解什么是稀疏文件和打孔,稀疏文件就是有一个程序在写文件时,先申请了一个1GB的空间,但是它只在这1GB的空间的最后的地方写入了几个字节的数据,但是表观看起来这个文件就是有1个GB。就好像我们下载电影,电影还没下完,但是磁盘上已经是显示这个电影的总大小了。这种并没有实际写入实际大小数据的文件你可以称之为稀疏文件。

打孔技术,就是对这样的文件进行整理,将未写的空间整理出来使用。

如果你是Java开发的话,你可以理解为JVM中垃圾收集时对内存进行的标记整理压缩算法。或者Windows中的磁盘碎片整理。

2.页面压缩的工作原理

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

Windows NTFS分区大小和压缩单元

分区大小压缩单元
512 Bytes8 KB
1 KB16 KB
2 KB32 KB
4 KB64 KB

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

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

要在Windows上进行页面压缩,必须创建分区大小小于4K的文件系统,innodb_page_size必须至少是压缩单元大小的两倍。

例如,为了在Windows上进行页面压缩,可以构建分区大小为512字节(压缩单位为8KB)的文件系统,并使用InnoDB_page_size值16K或更大的值初始化InnoDB

3.启用页面压缩

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

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

您还可以在ALTER TABLE语句中启用页面压缩。但是,ALTER TABLE ... COMPRESSION仅更新表空间压缩属性。

设置新的压缩算法后发生的对表空间的写入使用新设置,但要将新压缩算法应用于现有页面,必须使用OPTIMIZE TABLE重新生成表。

ALTER TABLE t1 COMPRESSION="zlib";
OPTIMIZE TABLE t1;

4.禁用页面压缩

若要禁用页面压缩,请使用ALTER TABLE将COMPRESSION 设置为None。

在设置COMPRESSION=None之后发生的对表空间的写入不再使用页面压缩。

若要解压缩现有页面,必须在设置COMPRESSION=None后使用OPTIMIZE TABLE重新生成表。

ALTER TABLE t1 COMPRESSION="None";
OPTIMIZE TABLE t1;

5.页面压缩-元数据

页面压缩元数据位于Information Schema库INNODB_TABLESPACES表的以下列中:

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

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

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

注意:

在类Unix系统上

ls-l tablespace_name.ibd字节为单位显示明显的文件大小(相当于file_size)。

要查看磁盘上分配的实际空间量(相当于ALLOCATED_SIZE):

请使用du--block SIZE=1 tablespace_name.ibd

--block size=1选项字节而不是的形式打印分配的空间,以便将其与ls-l输出进行比较。

使用SHOW CREATE TABLE查看当前页面压缩设置(Zlib、Lz4或None)。

一个表可能包含具有不同压缩设置页面的混合

在以下示例中,从Information Schema库INNODB_TABLESPACES表中检索employees表的页面压缩的元数据。

# Create the employees table with Zlib page compressionCREATE 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_TABLESPACESmysql> SELECT SPACE, NAME, FS_BLOCK_SIZE, FILE_SIZE, ALLOCATED_SIZE FROMINFORMATION_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

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

6.使用页面压缩识别表

要识别启用了页面压缩的表,可以检查Information Schema库的tables表的CREATE_OPTIONS列中是否有使用COMPRESSION 属性定义的表:

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属性(如果使用的话)。

 7.页面压缩限制和使用说明

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

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

redolog表空间不支持页面压缩。

undolog日志页不支持页面压缩。

用于空间索引的R树页不会被压缩。

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

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

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

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

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

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

与其他平台相比,使用NVMFSFusion io硬件可以实现更好的页面压缩,因为NVMFS旨在利用打孔功能。

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


上一篇:

【MySQL精通之路】InnoDB(9)-表和页压缩(1)-表压缩-CSDN博客


http://www.ppmy.cn/news/1464433.html

相关文章

PYQT5点击Button执行多次问题解决方案(亲测)

PYQT5点击Button却执行多次问题 使用pyqt5时遇到问题,UI上按钮点击一次,对应的槽函数却执行了3遍 首先,确认函数名无冲突,UI button名无命名冲突,下图是简单的示例程序: 运行后,点击按钮&#…

解决Android studio 一直提示下载gradle-xxx-all.zip问题

今天用AndroidStdiod打开一个新工程的时候,发现项目一直卡在正在下载gradle-xxx-all.zip的任务上,网络出奇的慢,即使配了VPN也无济于事,于是按照以往经验:将gradle-xxx-all.zip下载到.gradle\gradle\wrapper\dists目录…

Fine-tuning和模型训练的关系

概述 Fine-tuning和模型训练不是完全相同的概念,但它们之间有密切的关系,都是机器学习和深度学习过程中的重要步骤。 模型训练是一个更广泛的概念,指的是使用数据去调整模型的内部参数,以使得模型能够从输入数据中学习并做出预测…

MySql开源闪回工具MyFlash

MyFlash是由美团点评公司技术工程部开发并维护的一个开源的MySQL闪回工具,主要用于回滚DML(数据操纵语言)操作,如INSERT、UPDATE和DELETE。这个工具通过解析MySQL的binlog文件(版本v4),来实现数…

markdown语法保存

这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…

磁带存储:“不老的传说”依然在继续

现在是一个数据指数增长的时代,根据IDC数据预测,2025年全世界将产生175ZB的数据。 这里面大部分数据是不需要存储的,在2025预计每年需要存储11ZB的数据。换算个容易理解的说法,1ZB是10^18Bytes, 相当于要写5556万块容量18TB的硬盘…

什么是访问控制漏洞

什么是AC Bugs? 实验室 Vertical privilege escalation 仅通过隐藏目录/判断参数来权限控制是不安全的(爆破url/爬虫/robots.txt/Fuzz/jsfinder) Unprotected functionality 访问robots.txt 得到隐藏目录,访问目录 ,…

2024年QMT智能量化交易全解读:一文带你深入了解什么是QMT

随着科技的飞速发展和金融市场的日益成熟,量化交易逐渐成为投资者关注的焦点。QMT(Quantitative Market Trading)智能量化交易系统,作为量化交易领域的重要工具,以其高效、精准、自动化的特点,受到越来越多…