博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[MySQL 新特性] MySQL5.6 RC的压缩表自适应padding实现
阅读量:6427 次
发布时间:2019-06-23

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

以下是对facebook的adaptive padding实现简述,实际上,这是个很小的补丁,并且对OLTP的性能提升效果非常显著(但会影响压缩的效果)。

在5.6.7中引入了facebook对压缩表的改进,其中重要的特性之一就是adaptive padding。

我们知道,在buffer pool中,对一个压缩表的page,同时存在压缩页和非压缩页
–对Page的更改被记录到压缩page的mlog中
–当一个压缩页满时,会进行重压缩
–当重压缩失败时,会分裂压缩页

分裂压缩页的开销很大,需要对原先的压缩page拆分成两个Page,并重新进行压缩,并且会有额外的锁(index rw-lock)开销。

adaptive padding的目的是对一个buffer pool中一个16k的非压缩page”少放一些数据“,来降低压缩失败导致分裂的概率,例如之前会对一个装满16K数据的Page进行压缩,如果pad值为2K,那么会对14K的数据压缩,这会降低压缩失败的概率。

具体实现在函数dict_index_zip_pad_update中,每次压缩成功或失败,都会调用到这个函数。每采样ZIP_PAD_ROUND_LEN(128次)次会进行如下判断:
—当失败率高于 时,pad+=ZIP_PAD_INCR
—当失败率连续ZIP_PAD_SUCCESSFUL_ROUND_LIMIT(5)次低于 且pad>0时,pad-= ZIP_PAD_INCR
其中ZIP_PAD_INCR值默认为128
这样就对pad的值实现了动态调整。

函数dict_index_zip_success和dict_index_zip_failure在函数page_zip_compress中对应压缩成功和失败的逻辑被调用。

dict_index_zip_pad_optimal_page_size函数返回减去pad后的page大小,但不得小于(UNIV_PAGE_SIZE * (100 – zip_pad_max)) / 100,在如下函数被调用到:
1.btr_compress   //page merge,当page的size小于BTR_CUR_PAGE_COMPRESS_LIMIT时会尝试合并page,purge线程调用btr_cur_pessimistic_delete->btr_cur_compress_if_useful->btr_compress,另外在做btr_cur_pessimistic_update时也可能调用到

2.btr_cur_optimistic_insert     //insert操作

3.btr_cur_update_alloc_zip    //update操作

通过判断加上新记录后,是否超过optimal page size,如果超过了,则对16k page进行分裂或不进行合并。

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

你可能感兴趣的文章
CodeForces 143C Help Farmer
查看>>
Windows 各种控件使用心得
查看>>
SQL Server常见问题总结
查看>>
5.怎么以域名的形式来浏览网站(内网 + 外网)?
查看>>
搭建ORACLE11g_RAC_单实例_ADG 注意事项
查看>>
BootStrap框架选择
查看>>
[BZOJ] 1067: [SCOI2007]降雨量
查看>>
Stream
查看>>
翻译--Thinking in React
查看>>
JavaScript中this指向问题
查看>>
JPA或Hibernate中的
查看>>
web_find和web_reg_find 区别(转载)
查看>>
请设计一个算法能够完成两个用字符串存储的整数进行相加操作,对非法的输入则返回error...
查看>>
开博宣言
查看>>
【目录】 软件测试全栈需要学习什么? 软件测试的各个阶段 ,软件测试学习路径,软件测试方向选择,软件测试的薪资待遇。...
查看>>
CSS3动画【归纳总结】
查看>>
Web应用程序项目 已配置为使用IIS
查看>>
ElasticSearch-倒排索引
查看>>
Algs4-2.1.18可视轨迹-选择排序
查看>>
Algs4-2.2.5自顶向下和自底向上的归并排序的子数组和大小
查看>>