MySQL InnoDB支持数据压缩,有两种数据压缩方式,第一种为表压缩,通常也称之为行格式压缩,另外一种是页压缩(Page Compression),又叫做透明页压缩(Transparent Page Compression),是一种页面级别的数据压缩,页压缩对操作系统及文件系统有一定的要求。本文主要介绍页压缩的原理及使用方法。

页压缩只支持InnoDB独立表空间:file-per-table

页压缩需要操作系统具有稀疏文件(sparse file)或者文件打孔技术(hole punching)的支持,目前支持这种功能的主流操作系统如下:

Windows NTFS

RHEL 7 内核 3.10.0-123 及更高版本

Ubuntu 14.0.4 LTS 内核 3.13 及更高版本

Ubuntu 12.0.4 LTS 内核 3.2 及更高版本

Debian 7 内核 3.2 及更高版本

1. 页压缩语法

在create table或者alter table时,加上 COMPRESSION  子句,支持的压缩算法主要有Zlib 和 LZ4。

开启页压缩:

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

ALTER TABLE t1 COMPRESSION=”zlib”;

OPTIMIZE TABLE t1;

禁用页压缩:

ALTER TABLE t1 COMPRESSION=”None”;

OPTIMIZE TABLE t1;

2. 页压缩原理

当一个页被写入磁盘时,InnoDB使用指定的压缩算法对该页进行压缩,然后将压缩后的数据写入磁盘,此时打孔机制会将压缩后的页尾空闲块进行释放,以减少磁盘空间占用。如果压缩失败,则按照原样写入数据。

在Linux操作系统中,文件系统块大小是打孔的单位尺寸,因此,页压缩后的数据必须小于等于InnoDB页大小减去文件系统块大小的值,才能使页压缩生效。举个例子,InnoDB页大小16K,文件系统块大小4K,页数据必须被压缩到小于等于12K,才能使用打孔机制,减少磁盘空间占用。

在Windows操作系统中,稀疏文件基于NTFS文件系统压缩功能实现,打孔单位尺寸为NTFS压缩单元尺寸,这个尺寸是NTFS簇大小的16倍。NTFS簇大小与压缩单元大小对应关系如下表:

NTFS簇大小

NTFS压缩单元大小

512Bytes

8KB

1KB

16KB

2KB

32KB

4KB

64KB

同样的,只有当压缩后的数据小于等于InnoDB页大小减去压缩单元的大小时,才能使页压缩生效。默认的NTFS簇大小4KB,压缩单元大小64KB,这就意味着NTFS默认配置下,无法使用页压缩。因此,如果要想页压缩在NTFS文件系统上生效,需要设置NTFS簇大小为512Bytes,此时压缩单元大小为8KB,设置InnoDB页大小为默认的16KB,或者更大的32KB、64KB,才能使页压缩生效。

3. 页压缩的元数据

系统表 INNODB_SYS_TABLESPACES 存储了页压缩相关的元数据,其主要字段含义如下:

INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES

FS_BLOCK_SIZE:文件系统块尺寸,打孔单元的大小。

FILE_SIZE:表示未压缩文件的尺寸。

ALLOCATED_SIZE:在磁盘上分配的文件的实际尺寸。

使用页压缩功能后,ls命令显示的大小是未压缩的大小,而实际的大小使用du命令查看。

ls -l tablespace_name.ibd,显示FILE_SIZE大小

du –block-size=1 tablespace_name.ibd,显示ALLOCATED_SIZE大小

4. 页压缩的限制和使用注意事项

如果文件系统块大小或者压缩单元大小乘以2大于innodb页大小时,页压缩将自动失效。

共享表空间(系统表空间,临时表空间,通用表空间)中的表不支持页压缩。

undo log 和 redo log 表空间不支持页压缩。

空间索引 R-tree 页 不支持页压缩。

行格式压缩过的表(ROW_FORMAT=COMPRESSED),不支持页压缩。

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

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

使用一个较大的innodb页大小,比如64KB,文件系统块大小4KB,这样的配置能够提高压缩效果,但是同时也会导致写放大,需要更大的buffer pool,增加I/O消耗。

ubuntu 禁用透明大页_MySQL InnoDB 透明页压缩(Page Compression)相关推荐

  1. ubuntu 禁用透明大页_Linux关于透明大页的使用与禁用介绍

    随着计算需求规模的不断增大,应用程序对内存的需求也越来越大.为了实现虚拟内存管理机制,操作系统对内存实行分页管理.自内存"分页机制"提出之始,内存页面的默认大小便被设置为 4096 ...

  2. linux透明大页内存,Linux如何禁用透明大页

    环境: RHEL 6.5 + Oracle 11.2.0.4 RAC 1.确认透明大页是否开启 grep HugePage /proc/meminfo cat /sys/kernel/mm/redha ...

  3. 【内存】Linux 页表、大页与透明大页|大页内存

    目录 页表与MMU CPU访问的是什么地址(虚拟地址,物理地址)? MMU如何工作 MMU对内存的保护 多级页表 一. 内存映射与页表 1. 内存映射 2. 页表 4. 页表的简单工作原理 大页 什么 ...

  4. linux 内存管理 Transparent HugePages 透明大页 简介

    1. 介绍 从RedHat6, RedHat7, OL6, OL7 SLES11 and UEK2 kernels开始,透明大页默认是被开启的以便去改善操作系统的内存管理.透明大页与之前版本的传统意义 ...

  5. Oracle 标准大页和透明大页

    说明: 标准大页(HugePages) 标准大页(HugePages)是从 Linux Kernel 2.6 后被引入的. 目的是用更大的内存页面(memory page size)以适应越来越大的系 ...

  6. 透明大页相关内核参数_透明大内存页Hugepage支持

    ==目标== 在linux2.6.38之前,处理大容量内存工作集的高性能关键计算应用是运行在libhugetlbfs之上,必须依赖于 hugetlbfs,.透明Hugepage支持是一种替代手段,它使 ...

  7. 透明大页相关内核参数_Oracle关于内存参数及大页设置的相关概念和设置之hugepage概念和配置...

    一.概念: Oracle 数据库和 Linux 内存管理 系统中使用的内存越多,管理该内存所需的资源也就越多.对于 Linux 操作系统,通过 Linux kswapd 进程和页表内存结构(针对系统中 ...

  8. Linux 透明大页 THP 和标准大页 HP

    作者 | JiekeXu 来源 |公众号 JiekeXu DBA之路(ID: JiekeXu_IT) 大家好,我是JiekeXu,很高兴又和大家见面了,今天和大家一起来看看 Linux 透明大页 TH ...

  9. 透明大页相关内核参数_Linux7.4 关闭透明大页

    1 THP 背景知识补充说明 在Linux6.x之后的平台,在安装Oracle数据库的时候都建议关闭透明大页 Linux下的大页分为两种类型:标准大页(Huge Pages)和透明大页(Transpa ...

最新文章

  1. 网站初学笔记3-HTML实用元素3
  2. Android程序为什么没有退出设计?
  3. linux exec 二程序,二十五、Linux 进程与信号---exec函数
  4. java项目部署到linux上面,把我的Java项目部署到Linux系统
  5. 【.NET Core 跨平台 GUI 开发】第二篇:Gtk# 布局入门,初识HBox 和 VBox
  6. 嵌入式Linux系统编程学习之三十四 Socket 编程
  7. 马斯克2021五大预测:重返月球并比赛遥控汽车,全面实现自动驾驶,你pick哪一个?...
  8. acm的STL容器之队列篇 及 UVa 11292 - Dragon of Loowater 小根堆解法(贪心算法)
  9. zpk在MATLAB中是什么意思,_MATLAB在控制系统中应用 .ppt
  10. 7的整除特征 三位一截_茅台酒的合格证有哪些特征和鉴别要点?
  11. ITIL4定义的四大价值维度
  12. cmd 实用快捷键。。
  13. linux 删除网桥接口,linux 网桥代码分析 三 网桥及网桥端口的添加与删除
  14. 人工智能研究中深度学习的局限性
  15. 智能人物画像综合分析系统——Day7
  16. 无线测温采集设备及无线测温监控系统的选型指导-安科瑞王婧
  17. 千兆光纤 GBIC和SFP接口规格介绍
  18. TOP 5大数据工具,掌握1个你就是专家
  19. VMWare安装Kali Linux(4-4)
  20. dell电脑java下载_【亲测不管用】【DELL安装系统的坑】亲测UEFI启动模式的电脑安装Win10和Ubuntu双系统(dell笔记本和hp笔记本)...

热门文章

  1. 与变异风险词赛跑 阿里探索AI治理网络风险
  2. 一睹为快 | 施耐德电气全生命周期智能制造解决方案亮相线上工博
  3. 阿里云宣布3年再投2000亿
  4. 我花了一夜用数据结构给女朋友写个H5走迷宫游戏 | CSDN 博文精选
  5. host文件注释 ubuntu_Redis and MongoDB 设置密码验证(scrapy)(win)(ubuntu)
  6. java变位词_GoLang 字符串变位词
  7. JavaScript从入门到放弃 -(四)E5 新增方法
  8. Vue3 --- vue-router4 编程导航
  9. break continye
  10. 星外主机销售系统源码_业务员大客户销售订货订单管理系统源码开发外包解析...