mysql数据被污染了_mysqldump造成Buffer Pool污染的研究
发布日期:2022-02-03 13:16:59 浏览次数:8 分类:技术文章

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

前言:

最近Oracle MySQL在其官方Blog上贴出了 5.6中一些

关于该参数的作用摘录如下:

how long in milliseconds (ms) a block inserted into the oldsublistmust stay there after its first access before it can be moved to the new sublist. Increasing this value protects against the buffer pool being filled up by data that is referenced only for a brief period, such as during afull table scan.

其实作用就是:减小单次的大批量数据查询(类似于mysqldump的行为)对于BufferPool(下称BP)的污染。

说到这里就不得不提一下BP的midpoint insert 机制。

下文就将对于这个机制做一定分析和讨论。

一、 Buffer Pool 的insert 机制

BP可以被认为是一条长链表。被分成young 和 old两个部分,其中old默认占37%的大小(由

由于table scan的操作是先load page,然后立即触发一次访问。所以当

percona之前也做过

是否真是如此呢,我们来亲自测试一下。

下面是测试结果:

其中concurrency代表sysbench中 --num-threads的数值。

OPT代表该环境下,没有mysqldump时的sysbench QPS。

余下两列分别代表有mysqldump时的sysbench QPS。

Concurrency

OPT

old_time=0

old_time=1000

1

17394

1836

2141

2

29703

3670

3981

3

47347

5683

6540

4

64717

6805

8337

5

83551

8676

15885

6

99396

12978

19893

7

112330

16491

26022

8

126600

23840

33346

9

138468

30760

39194

10

150365

39034

48925

11

163053

43174

60352

12

174916

52066

70180

13

174160

63853

78076

14

173786

65164

80661

15

174268

70965

90633

16

175044

80871

102629

17

175583

90689

103423

18

175939

94805

112629

19

175114

93303

120625

由结果可以看出,time=1000并没有给查询性能带来很大的提升。最佳情况下也只是比time=0时提高80%的性能。

为什么呢?

其实不难理解,表中的concurrency很大程度上决定了测试page的冷热程度。并发数越大,每面产生的并行请求就越多,从而每个page被访问的频率就越高,page在LRU链表中的位置也就越靠顶端。反之亦然。

那么我们来想想下高频率热点数据访问时的情况。这时虽然mysqldump访问的page会不断加载在LRU顶端,但是高频度的热点数据访问会以更快的速度把page再次抢占到LRU顶端。从而导致mysqldump加载入的page会被迅速刷下,并立即被evict(淘汰)。因此,time=0或1000对这种压力环境下的访问不会造成很大影响,因为dump的数据根本抢占不过热点数据。

同样,超低频率的数据访问也是一样的情况。由于数据访问频度很低,大量的page都处于LRU链表的尾端。所以无论dump的page被加载到head或是midpoint位置,都会在热点数据的前面。也就是说无论怎样,数据page都会被淘汰。所以,这种压力环境下的性能同样不会随着time值的配置变化有很大浮动。

真正能够享受到time带来的福利的是那些 处于midpoint边缘的不温不火的数据。

从下图也可以看出,性能提升最大的情况集中在中等访问量的情况下,也即 37%的位置上

0ef4b53301c5fdc17ec798021ce95922.png

三、 Mid Point位置带来的影响

从之前的分析也可以得出这样的结论:

那么 innodb_old_blocks_pct 的调节,能够左右 innodb_old_blocks_time的影响范围。

上图的曲线也证明了这样的观点。当innodb_old_blocks_pct 调节到60%时,波峰也相应平移到了 60%的位置。

总结:

1. innodb_old_blocks_time =1000 一定程度上可以降低mysqldump类型的访问对数据库性能带来的影响。

2. innodb_old_blocks_time =1000 的优化效果有限,对于处于midpoint附近的page能带来最大的提升效果。

转载地址:https://blog.csdn.net/weixin_34759094/article/details/113326227 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:mysql php nginx_linux Ubuntu下php+mysql+nginx的安装与配置
下一篇:大学一年级软件工程学什么_985/广东省/华南理工大学/考408,计算机考研究竟值不值?...

发表评论

最新留言

路过按个爪印,很不错,赞一个!
[***.219.124.196]2024年03月07日 08时36分45秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

android studio 52 mp3下载客户端001 2019-04-21
android studio 53 mp3 2019-04-21
Android studio 53 文件下载 2019-04-21
android studio 54 下载进度条 2019-04-21
android studio 70 歌曲服务器搭建 歌曲app 完整代码(发布版) 2019-04-21
Android单击事件处理与监听003 2019-04-21
vb 读取mysql所有表名_vb怎么列举出一个mdb数据库里面所有表名? 2019-04-21
mysql行级锁升级_mysql innodb 行级锁升级 2019-04-21
c 调用mysql密码为空_C语言连MySQL - osc_srnunz15的个人空间 - OSCHINA - 中文开源技术交流社区... 2019-04-21
mysql怎么分组查询所有数据库_Mysql-4 分组查询与子查询 2019-04-21
mysql 多列union_Mysql联合查询UNION和UNION ALL的使用介绍 2019-04-21
mysql导数据出指定数量_mysql导出指定数据或部份数据的方法 2019-04-21
java thread 多线程_java用Thread方式创建多线程 2019-04-21
java 注解与反射_Java注解与反射直接上手 2019-04-21
java按钮退出_java – 如何在此程序中添加退出按钮?怎么样“清楚”? 2019-04-21
python土味情话_Python 将土味情话语录设置为桌面壁纸 2019-04-21
java ip 范围内打卡_定位地理位置PHP判断员工打卡签到经纬度是否在打卡之内 2019-04-21
与java线程有关的,线程多少和什么有关?大神们表示有话要说! 2019-04-21
php正则表达式 匹配数字,正则表达式之匹配数字范围 2019-04-21
php中带?错误,参考-此错误在PHP中意味着什么? 2019-04-21