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

目录

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.mzph.cn/bicheng/17908.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

项目9-网页聊天室3(主界面之用户信息)

1.前端页面 CSS: 如何让img里的图片自适应div,且不变形_img自适应div大小 铺满且不变形-CSDN博客 JavaScript/jQuery 如何改变一个img元素的src属性|极客教程 (geek-docs.com) 2.要求 左上角显示用户的昵称和头像. 3.后端代码 3.1 添加拦截器 3.2 注册拦截器 …

关于C++的类型转换一篇搞掂

类型转换 本篇主要探讨C11的新出现的类型转换方式 隐式类型转换(意义相近的类型可转换) 显示类型转换(意义不相近的类型需强制类型转换) C为了加强类型转换的可视性, 引入了四种命名强制类型转换操作符 但同时也兼容了C语言之前的类型转换和强制类型转换, 只是提供了规范的转…

go升级后 编译的exe在win7上无法正常运行

D:/Go/src/runtime/sys_windows_amd64.s:65 x75 fpx22fca sp-0x22fc8日 升级到go 1.21后报一堆错误,要死了啊 原来是go 1.21不支持win7了,必须把go退回到1.20版本 谷歌发布编程语言 Go 1.21 版本:取消支持微软 Win7/8 及苹果 macOS 10.13/10…

pip install pytorch-quantization error

一 报错信息 最近安装pytorch-quantization报错,安装失败报错信息如下: Looking in indexes: https://pypi.org/simple, https://pypi.ngc.nvidia.com Collecting pytorch-quantizationDownloading pytorch-quantization-2.2.1.tar.gz (6.8 kB)Prepari…

Alibaba Cloud Linux 安装docker

阿里云实例基于 Red Hat 的发行版(例如 CentOS 或 Alibaba Cloud Linux)。在这种情况下,应该使用 yum 或 dnf 包管理器,而不是 apt。以下是如何在 CentOS 或类似系统上安装 Docker 的步骤: 1. 更新系统 首先&#xf…

网络渗透思考

1. windows登录的明文密码,存储过程是怎么样的,密文存在哪个文件下,该文件是否可以打开,并且查看到密文 windows的明文密码:是通过LSA(Local Security Authority)进行存储加密的 存储过程:当用户输入密码之…

用C语言实现扫雷

本篇适用于C语言初学者,主要涉及对于函数,数组,分支循环的运用。 目录 设计思想: 总代码(改进后): 运行结果展示: 分布介绍: 声明: 代码主体部分&#…

Vue3学习使用axios和qs进行POST请求和响应处理

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、前言1.准备工作2.发送POST请求3.处理响应数据4.总结 一、前言 在前端开发中,经常需要与后端进行数据交互,其中包括发送POST请求并处理响…

Docker - Kafka

博文目录 文章目录 说明命令 说明 Docker Hub - bitnami/kafka Docker Hub - apache/kafka Kafka QuickStart Kafka 目前没有官方镜像, 目前拉取次数最多的 bitnami/kafka, Apache 提供的是 apache/kafka, 本文使用 bitnami/kafka 数据卷数据卷印射在容器内的路径kafka/bitna…

HarmonyOS 鸿蒙应用开发 - 创建自定义组件

开发者定义的称为自定义组件。在进行 UI 界面开发时,通常不是简单的将系统组件进行组合使用,而是需要考虑代码可复用性、业务逻辑与UI分离,后续版本演进等因素。因此,将UI和部分业务逻辑封装成自定义组件是不可或缺的能力。 1、创…

快团团帮卖团长怎么对供货大团长进行评分?

都说帮卖“躺赚”? 一旦遇团不淑,惨遭不靠谱团长挖坑,售后拖延、发货慢、产品瑕疵…… 加上顾客夺命连环催,双面夹击,夹缝生存。供货团长靠不靠谱太重要了! 快团团供货团长评分系统上线! 帮卖团…

【神经网络优化的策略有哪些???】

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、神经网络优化策略总结 前言 神经网络优化是深度学习中至关重要的一部分,它涉及到调整神经网络参数以最小化损失函数。 以下是一些常见的神经网…

ECOLOGY9解决明细表数据按需显示或隐藏

ECOLOGY9:由于领导需要查看完整的明细表数据,没有启用分页功能,导致大领导查看时又出现几百行的数据,影响使用体验。需求:只看正常表单数据,明细表数据,默认不显示,需要查看时再打开。 实现&am…

2024年华为OD机试真题-火星文计算-C++-OD统一考试(C卷D卷)

题目描述: 已知火星人使用的运算符为#、$,其与地球人的等价公式如下: x#y = 4*x+3*y+2 x$y = 2*x+y+3 1、其中x、y是无符号整数 2、地球人公式按C语言规则计算 3、火星人公式中,#的优先级高于$,相同的运算符,按从左到右的顺序计算 现有一段火星人的字符串报文,请…

【RK3288 Android10 T8pro usb hid-multitouch idc配置】

【RK3288 Android10 T8pro usb hid-multitouch idc配置】 文章目录 【RK3288 Android10 T8pro usb hid-multitouch idc配置】背景代码分析1. 读取配置文件2. 标志内外置屏幕3. 设置输入设备4. findviewport()5. 根据对应的viewport来计算相应的mapping的参数 结论 背景 T8pro …

二十三篇:未来数据库革新:AI与云原生的融合之旅

未来数据库革新:AI与云原生的融合之旅 1. 智能数据库管理:AI的魔法 在数字化时代,数据库技术作为信息管理的核心,正经历着前所未有的变革。AI(人工智能)和云原生技术的融合,正在重新定义数据库…

关于k8s集群的污点和容忍,以及k8s集群的故障排查思路

一 污点(Taint) 和 容忍(Tolerations) (一)污点 在Kubernetes(K8s)中,污点(Taints)是一个重要的概念,用于实现Pod的调度控制。以下是关于污点的详细解释:1.污点定义 污点…

元宇宙vr科普馆场景制作引领行业潮流

在这个数字化高速发展的时代,北京3D元宇宙场景在线制作以其独特的优势,成为了行业内的创新引领者。它能够快速完成空间设计,根据您的个性化需求,轻松设置布局、灯光、音效以及互动元素等,为您打造出一个更加真实、丰富…

【算法】位运算算法——判断字符是否唯一

题解:判断字符是否唯一(位运算算法) 目录 1.题目2.题解3.位图参考代码4.细节5.总结 1.题目 题目链接:LINK 2.题解 题解有两种方法, 一是做一个哈希数组,去查重; 二是直接用一个变量每一位来对应表示是否有这个字母…

Android - failed to set system property

记录一次疏忽,起因是我需要在自定义的 receiver 中保存 property 方便,方便在三方 app 中使用,结果直接崩溃了,虽然结果保存成功了,但是这种情况也是无法接收的,错误日志如下: M006082 05-25 1…