MySQL 8 InnoDB Table 和 Page 压缩
压缩用一点CPU换取磁盘IO、内存空间、磁盘空间。
在有Secondary Indexes 的表中,使用压缩更加明显,相关索引数据也会压缩。
InnoDB 表压缩
对表压缩只需要在Create Table 时指定ROW_FORMAT=Compressed即可。
压缩的行格式不适用于InnoDB 系统表空间,这也可能就是为什么@@innodb_default_row_format不能指定为compressed的原因吧。
key_block_size 选项:指定磁盘上Table 的Page Size。较小的值需要的IO也会比较小。但是过小,可能导致单个Page不能保存多行,InnoDB需要重新组织Page。而且Key Block Size 值受到Table 上Index 列的硬性要求。
Key Block Size 的指定,在Buffer Pool 中也需要相应的Page Size 缓存。在InnoDB Buffer Pool中,提取或者更新compressed Page需要先uncompressed Page,在更新UnCompressed Page 后,还需要写回到 Compressed Page中。这里会出现一种情况,Buffer Pool 中保存同一个Page的两种形式:Compressed 和 UnCompressed。如果Buffer Pool 需要空间,会删除UnCompressed Pages,在需要时,再次 UnCompressed Pages。
Key Block Size的大小对于Compress Level没有影响,他只是设置了Page的大小。
是否做表压缩主要是依赖表中数据:
包含字符串、重复值、这样压缩效果才会有。因为InnoDB基于Page来压缩数据,如果没有重复值,或者binary 数据类型(数值型),压缩意义也就不大了。
有两个可选的方法测试表的压缩是否具有可行性:
使用OS压缩工具,比如gzip压缩表,可以大致对比使用MySQL压缩的情况。
创建待压缩表的复制表,压缩复制表。
简单查看压缩效果,对于系统中只有一张压缩表:
select * from information_schema.innodb_cmp;
MySQL 8 InnoDB Table 和 Page 压缩的更多相关文章
- MySQL 5.6 Reference Manual-14.7 InnoDB Table Compression
14.7 InnoDB Table Compression 14.7.1 Overview of Table Compression 14.7.2 Enabling Compression for a ...
- MySQL 5.6 Reference Manual-14.6 InnoDB Table Management
14.6 InnoDB Table Management 14.6.1 Creating InnoDB Tables 14.6.2 Moving or Copying InnoDB Tables to ...
- mysql的innodb数据库引擎详解
http://www.jb51.net/softjc/158474.html 这篇文章主要介绍了mysql的innodb数据库引擎,需要的朋友可以参考下 一.mysql体系结构和存储引擎 1. ...
- MySQL数据库InnoDB存储引擎多版本控制(MVCC)实现原理分析
文/何登成 导读: 来自网易研究院的MySQL内核技术研究人何登成,把MySQL数据库InnoDB存储引擎的多版本控制(简称:MVCC)实现原理,做了深入的研究与详细的文字图表分析,方便大家理解I ...
- MySQL数据库InnoDB存储引擎中的锁机制
MySQL数据库InnoDB存储引擎中的锁机制 http://www.uml.org.cn/sjjm/201205302.asp 00 – 基本概念 当并发事务同时访问一个资源的时候,有可能 ...
- (转)mysql、innodb和加锁分析
mysql.innodb和加锁分析 原文:https://liuzhengyang.github.io/2016/09/25/mysqlinnodb/ 介绍 本文主要介绍MySQL和InnoDB存储引 ...
- Recovering InnoDB table from an .ibd file.
Recovering an InnoDB table from only an .ibd file. Sometime you may need to recover a table when all ...
- 重新学习MySQL数据库2:『浅入浅出』MySQL 和 InnoDB
重新学习Mysql数据库2:『浅入浅出』MySQL 和 InnoDB 作为一名开发人员,在日常的工作中会难以避免地接触到数据库,无论是基于文件的 sqlite 还是工程上使用非常广泛的 MySQL.P ...
- 『浅入浅出』MySQL 和 InnoDB
作为一名开发人员,在日常的工作中会难以避免地接触到数据库,无论是基于文件的 sqlite 还是工程上使用非常广泛的 MySQL.PostgreSQL,但是一直以来也没有对数据库有一个非常清晰并且成体系 ...
随机推荐
- GP工作室—团队项目总结
GP工作室-团队项目总结 这个作业属于哪个课程 https://edu.cnblogs.com/campus/xnsy/GeographicInformationScience/ 这个作业要求在哪里 ...
- 自定义HttpMessageConverter实现RestTemplate的exchange方法返回自定义格式数据
一 概述 实现如下效果代码,且可正常获取到返回数据: ResponseEntity<JsonObject> resEntity = restTemplate .exchange(url, ...
- BP的matlab实现
%2015.04.26 Kang Yongxin ----v 2.0 %完成作业中BP算法,采用批量方式更新权重 %% %输入数据格式 %x 矩阵 : 样本个数*特征维度 %y 矩阵 :样本个数*类别 ...
- Maven - 配置管理
Maven Maven是一款自动化构建工具,专注服务于Java平台的项目构建和依赖管理.Project Object Model:项目对象模型.将Java工程的相关信息封装为对象形式作为便于操作和管理 ...
- 时序数据库 Apache-IoTDB 源码解析之前言(一)
IoTDB 是一款时序数据库,相关竞品有 Kairosdb,InfluxDB,TimescaleDB等,主要使用场景是在物联网相关行业,如:车联网.风力发电.地铁.飞机监控等等,具体应用案例及公司详情 ...
- C语言宏的神奇写法:语句块作为参数,算半个函数式编程?
我想要写几个循环做测试代码,每次都写 `for(size_t i = 0; i < n; i++)` 很烦人,然后就灵机一动,能不能用宏实现,然后就写出了: #define repeat(n, ...
- logstash split插件的使用(将一个事件拆分成多个事件)
kafka中的原始数据格式(1条数据) { "body": { "cwd": "/home/test/", "monitor&qu ...
- 计算机网络 & 网络编程 期末总结与测评题
第一部分:网络编程部分的相关知识 Socket套接字定义: 套接字(socket)是一个抽象层,应用程序可以通过它发送或接收数据,可对其进行像对文件一样的打开.读写和关闭等操作.套接字允许应用程序 ...
- 配置 Docker 加速器
Linux curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io ...
- 在家想自学Java,有C语言底子,请问哪本书适合?
一.问题剖析 看到这个问题,我想吹水两句再做推荐.一般发出这个疑问都处在初学编程阶段,编程语言都是相通的,只要你领悟了一门语言的"任督二脉",以后你学哪一门语言都会轻易上手.学语言 ...