mysql 5.7 Transparent PageIO Compression
来源:互联网 发布:国家授时中心网络时间 编辑:程序博客网 时间:2024/05/22 17:50
上接上篇。本篇作为补充:
原理
innodb的透明页IO压缩,利用punch hole和数据压缩来实现。在内存中是一个正常的页,只有在写到磁盘时,才进行压缩。调用函数os_file_io_complete进行punch hole操作,os_file_io_complete调用的是fallocate()操作系统函数,并且使用 FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE标签,回收磁盘上页的空闲block。具体方法是先将压缩后的内容写入到磁盘,此时磁盘上页仍然是16K,写完成后,调用fallocate函数回收磁盘页中空闲的block,该block以系统block_size为单位。
优点
1、内存中方便管理,只有正常页,不存在压缩后的页
2、更加简单灵活的使用压缩算法
3、代码上可以针对各种类型的页进行压缩
缺点
引用淘宝数据库内核月报中内容:
- 无法完美压缩:例如9KB的数据可能需要12kb来存储,取决于block size;
- 无法压缩Buffer pool, 这是和传统innodb压缩相比,以前的压缩方式可以在内存中只存放压缩页拷贝 (然而也有可能同时存在压缩和解压页),因此用户可能需要去购买iops更高的设备,而oracle正好也卖这些….
- punch hole 可能产生的文件碎片化,底层的文件管理更加复杂;
- 对innodb文件做punch hole可能带来的后果是,使得每个文件的page变成一个独立的segment,文件系统需要单独的journal和metadata来管理。另外也有可能有性能问题:可能比non-sparse的写操作昂贵五倍 (这依赖于具体的内核);
- 删除一个拥有几百万个段管理对象的数据文件带来的开销会非常昂贵。
mariadb
mysql的innodb中仅支持2种压缩算法,而mariadb的XTRADB中可支持zlib、lz4、lzo、lzma、bzip2、snappy等5种算法。除了,zlib、lz4外,其他的需要下载代码进行编译安装。如何使用可参考https://mariadb.com/kb/en/library/compression/
阅读全文
1 0
- mysql 5.7 Transparent PageIO Compression
- MySQL Blob Compression performance benefits
- Setting MySQL INNODB Compression KEY_BLOCK_SIZE
- Compression
- Transparent Huge Pages相关概念及对mysql的影响
- Transparent Hugepage造成带ToKudb引擎的Mysql无法启动
- clock transparent
- transparent CStatic
- SetBkMode(TRANSPARENT)
- Transparent UIToolBar
- Transparent UIToolBar
- Transparent Text
- SetBkMode(TRANSPARENT)
- background:transparent
- MemoryStream Compression
- Http Compression
- compression engine
- HTTP Compression
- 【C语言】求取第n个斐波那契数的时间复杂度、空间复杂度分析,用三种方式实现(普通递归,循环,优化递归)
- mybatis foreach 出现 there is no getter for property named '__frch_item_0' in 'class
- python-set()集合操作(创建、添加、删除、交集、并集、差集、对称差集)
- 幸运大奖
- express连接数据库、上传图片总结
- mysql 5.7 Transparent PageIO Compression
- 2017哈理工低年级组院赛初赛 D-逃脱 【一个贼墨迹的bfs】
- Surf特征点检测
- 资源之访问Resource(三)
- 分布式缓存Redis之Java客户端
- 输出菱形图案的非对偶做法
- netfilter/iptables全攻略
- 生产者消费者问题条件变量实现
- 替罪羊树