博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[MySQL源码] Facebook对压缩表的改进
阅读量:6246 次
发布时间:2019-06-22

本文共 1425 字,大约阅读时间需要 4 分钟。

由于公司最近很多地方需要开始有使用压缩表的需求,但根据测试结果,压缩表对OLTP的性能相当不理想,在最近的一次测试中,UPDATE的性能最大可以下降到1/12,几乎不可接受。

 

Facebook2011年开始对压缩表进行改进,花了两个星期从facebook的博客、facebook成员在官方list上提交的bug以及Marklauchpad上提交的patch着手调研,以下内容基本涵盖了Facebook对压缩表的改进,以及对应的Rev

接下来,需要做的就是研究这些Patch,如何为我所用。

 

注:除了以下内容,在查看facebook的bzr log时,还发现很多比较小的优化点(例如对innodb层线程调度的改进),但未公布出来,有兴趣的可以看看。

 

1.提供更多的信息来监控/诊断压缩表性能

MySQL本身(包括Percona版本)提供的压缩表内部信息非常少,很难通过这些信息来进行优化,Facebook增加了大量的信息用以显示。

mysql@facebook的代码来看,为table_statistics增加了大量的统计数据,包括IO、索引、压缩表相关信息,我们关注如下几个跟压缩表相关的信息:

COMPRESSED_PAGE_SIZE COMPRESS_PADDING PADDING_SAVINGS COMPRESS_OPS 

COMPRESS_OPS_OK COMPRESS_PRIMARY_OPS COMPRESS_PRIMARY_OPS_OK

 COMPRESS_USECS COMPRESS_OK_USECS COMPRESS_PRIMARY_USECS 

COMPRESS_PRIMARY_OK_USECS UNCOMPRESS_OPS UNCOMPRESS_USECS

另外在update_global_table_stats函数中,facebook做了一些优化,通过原子操作代替锁操作,避免长期持有全局锁 LOCK_global_table_stats

相关:

扩展innodb_cmp表的信息 

更多的global status信息 

 

2.redo log中移除压缩Page,并为压缩表增加了一种新的日志记录 

 

3.增加adpative padding功能,减少每个page上的数据来降低压缩失败率

类似于在page上填写空白,当压缩失败率升高到某个层次时,加大pad值。当失败率维持在很低的水平时,则减小pad值。

动态padding实现 

线性算法计算自适应padding值 

4.减少分配的空白页,以降低文件的大小

相关bug: 

 

5.减少压缩Pagemalloc/free次数

避免每次page 压缩/解压时频繁malloc/free 内存 

 

6.更高效的压缩page checksum

对压缩page使用快速checksum  related 

通过只在需要的时候计算压缩page/非压缩pagechecksum来降低cpu占用  ,  

 

7.移除对adler32的调用 

 

8.允许设置zlib的压缩级别

增加了新的参数innodb_compression_level来控制zlib的压缩级别 

 

9. fix   

 

10.其他

增加innochecksum工具对压缩表的支持 

Fix bug#64258 可动态调整WAIT_FOR_READ 

跟压缩表相关,未具说明的bugfix ,  maybe related to 

 

转载地址:http://ydmia.baihongyu.com/

你可能感兴趣的文章
第四章 表达式
查看>>
Python数值计算:一 使用Pylab绘图(3)
查看>>
python爬虫知识点总结(十八)Scrapy框架基本使用
查看>>
限制textarea的字数(包括复制粘贴)
查看>>
ArcGIS Server中的各种服务
查看>>
HIVE: Transform应用实例
查看>>
Some examples about how to write anonymous method and lambda expression
查看>>
linux下可以禁用的一些服务
查看>>
aria2的下载配置
查看>>
C++扬帆远航——14(求两个数的最大公约数)
查看>>
django-blog-zinna搭建个人blog
查看>>
as3 文本竖排效果实现
查看>>
Window下Eclipse+Tomcat远程调试
查看>>
夜间模式的开启与关闭,父模板的制作
查看>>
2016/4/19
查看>>
计算一元二次方程的根
查看>>
队列和栈
查看>>
升级了U3D引擎一下,苦逼了...
查看>>
Javascript中封装window.open解决不兼容问题
查看>>
100%会用到的angularjs的知识点【新手可mark】
查看>>