博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MySQL5.6 RC innodb_log_compressed_pages 测试 及实现简述
阅读量:6990 次
发布时间:2019-06-27

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

MySQL5.6 RC增加了一个参数innodb_log_compressed_pages,以判定在压缩page时,是否在redo中存储压缩页数据。

最近把该特性在5.5.18上做了实现,从测试的效果来看,大大减少了redo log的写入量(降低到1/3~1/5),这会降低checkpoint的概率,并稍微增加了tps
以下数据,包括tps及每秒的log平均写入量(采集自status值Innodb_os_log_written)

innodb_log_compressed_pages
=0
innodb_log_compressed_pages
=1
Prepare data
 8333 rows/s   
 2.37MB/s
8130 rows/s
6.79MB/s
update_non_index.lua
1880.32 per sec 
3.26MB/s
1780.51 per sec
16.56MB/s
update_index.lua
1896.34 per sec
3.19MB/s
1824.21 per sec
16.93MB/s
oltp.lua
576.85 per sec
1.62MB/s
559.52 per sec
14.27MB/s

后续还需要做一些相关的crash恢复测试

其他:innodb_log_compressed_pages主要修改细节

原本innodb记录每个压缩Page到redo中,目的是为了防止在崩溃恢复时,压缩的算法发生改变,尤其在引入了可调整的压缩级别(innodb_compression_level)后,如果重启后,使用不同的level,就可能无法恢复出一致的压缩页

mlog的背景知识可以参考这个:

目前对mini-transaction、redo以及崩溃恢复机制还不是特别了解,以下只是简述,并未深入。

1.btr_page_reorganize_low
@增加参数 compression_level
@在做page reorgnize之前,需要先写入一条mlog
之前是写入一条MLOG_COMP_PAGE_REORGANIZE或者MLOG_PAGE_REORGANIZE类型的mlog(mlog_open_and_write_index)
新的实现,增加了针对压缩表mlog类型MLOG_ZIP_PAGE_REORGANIZE,会写入压缩级别值。(在崩溃恢复时,也会调用到该函数,但mtr->log_mode为MTR_LOG_NONE,这时候不记录mlog)
例如,insert产生的调用栈为:
row_ins_index_entry->row_ins_index_entry_low->btr_cur_optimistic_insert->btr_page_reorganize->btr_page_reorganize_low

2.btr_cur_update_alloc_zip
这个函数用于检查压缩页中的mlog是否有足够的位置,如果没有,则需要重压缩,我们将page_zip_compress的mtr参数设置为NULL,就可以避免压缩页被写到redo中。

但我们需要写入一条redo log。记录压缩级别,因此引入了新的函数page_zip_compress_write_log_no_data以实现此功能,该函数会写入一条MLOG_ZIP_PAGE_COMPRESS_NO_DATA类型的redo log.

3.page_cur_insert_rec_zip_reorg
如果调用page_zip_compress压缩成功,并且关闭选项,则记录一条插入的redo log(page_cur_insert_rec_write_log,还没理清楚….),并调用page_zip_compress_write_log_no_data写入compress level.

4.为了实现崩溃恢复,recv_parse_or_apply_log_rec_body函数用于解析redo log中的记录并进行应用,有一大串的switch case,用以针对不同的mlog类型调用相应的函数
case MLOG_ZIP_PAGE_REORGANIZE:
–>和MLOG_PAGE_REORGANIZE以及MLOG_COMP_PAGE_REORGANIZE一样调用的是btr_parse_page_reorganize,btr_parse_page_reorganize会先从mlog中读取compress level,然后再调用btr_page_reorganize_low来重组织page

case MLOG_ZIP_PAGE_COMPRESS_NO_DATA:
–>增加新函数page_zip_parse_compress_no_data
读取redo log中记录的压缩级别,然后调用page_zip_compress做page压缩,这样可以保证崩溃前后压缩的数据是一样的。

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

你可能感兴趣的文章
我的友情链接
查看>>
笔记本做软AP,手机能够PING通外网,不能上网
查看>>
view的自动点击,模拟人手去触摸控件
查看>>
UIWindow
查看>>
laravel-push-notification 推送消息
查看>>
Spring Data Redis 管理Redis 之1
查看>>
统计 Exchange 2007 邮件发送量
查看>>
1-6 Zabbix 一些基本监控项
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
ecshop提交到服务器,样式不正确
查看>>
我的友情链接
查看>>
WEB高性能
查看>>
[每日短篇] 7 - 幂等
查看>>
C++ 开发中的 Docker 使用 (2) - 热身
查看>>
lvs简介及dr模型应用
查看>>
关于项目分组和项目合并——入门必学
查看>>
cisco路由器的寄存器值(忘记密码时要进机器时候用的)
查看>>
我也来拆个无线路由器,斐讯的FIR302M
查看>>
同一个微信 不同的识别码 微信多开
查看>>