国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > MySQL > 正文

mysqldump造成Buffer Pool污染的研究

2020-01-18 23:57:34
字體:
供稿:網(wǎng)友

前言:

最近Oracle MySQL在其官方Blog上貼出了 5.6中一些變量默認值的修改。其中innodb_old_blocks_time 的默認值從0替換成了1000(即1s)

關(guān)于該參數(shù)的作用摘錄如下:

how long in milliseconds (ms) a block inserted into the old sublist must 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 a full table scan.

其實作用就是:減小單次的大批量數(shù)據(jù)查詢(類似于mysqldump的行為)對于BufferPool(下稱BP)的污染。

說到這里就不得不提一下BP的midpoint insert 機制。

下文就將對于這個機制做一定分析和討論。


一、 Buffer Pool 的insert 機制

BP可以被認為是一條長鏈表。被分成young 和 old兩個部分,其中old默認占37%的大小(由innodb_old_blocks_pct 配置)。靠近頂端的Page表示最近被放問。靠近尾端的Page表示長時間未被訪問。而這兩個部分的交匯處成為midpoint。每當有新的Page需要加載到BP時,該page都會被插入到midpoint的位置,并聲明為old-page。當old部分的page,被訪問到時,該page會被提升到鏈表的頂端,標識為young。

由于table scan的操作是先load page,然后立即觸發(fā)一次訪問。所以當innodb_old_blocks_time =0 時,會導(dǎo)致table scan所需要的page不讀的作為young page被添加到鏈表頂端。而一些使用較為不頻繁的page就會被擠出BP,使得之后的SQL會產(chǎn)生磁盤IO,從而導(dǎo)致響應(yīng)速度變慢。這也就是標題中所提到的BP污染。

 

二、 修改innodb_old_blocks_time 的效果

percona之前也做過相關(guān)測試,其結(jié)論是time=0時,正常訪問的吞吐量下降為10%;當time=1000時,吞吐量和沒有備份時的性能一致。

是否真是如此呢,我們來親自測試一下。

下面是測試結(jié)果:

其中concurrency代表sysbench中 --num-threads的數(shù)值。

OPT代表該環(huán)境下,沒有mysqldump時的sysbench QPS。

余下兩列分別代表有mysqldump時的sysbench QPS。

ConcurrencyOPTold_time=0old_time=1000
11739418362141
22970336703981
34734756836540
46471768058337
583551867615885
6993961297819893
71123301649126022
81266002384033346
91384683076039194
101503653903448925
111630534317460352
121749165206670180
131741606385378076
141737866516480661
151742687096590633
1617504480871102629
1717558390689103423
1817593994805112629
1917511493303120625

由結(jié)果可以看出,time=1000并沒有給查詢性能帶來很大的提升。最佳情況下也只是比time=0時提高80%的性能。

為什么呢?

其實不難理解,表中的concurrency很大程度上決定了測試page的冷熱程度。并發(fā)數(shù)越大,每面產(chǎn)生的并行請求就越多,從而每個page被訪問的頻率就越高,page在LRU鏈表中的位置也就越靠頂端。反之亦然。

那么我們來想想下高頻率熱點數(shù)據(jù)訪問時的情況。這時雖然mysqldump訪問的page會不斷加載在LRU頂端,但是高頻度的熱點數(shù)據(jù)訪問會以更快的速度把page再次搶占到LRU頂端。從而導(dǎo)致mysqldump加載入的page會被迅速刷下,并立即被evict(淘汰)。因此,time=0或1000對這種壓力環(huán)境下的訪問不會造成很大影響,因為dump的數(shù)據(jù)根本搶占不過熱點數(shù)據(jù)。

同樣,超低頻率的數(shù)據(jù)訪問也是一樣的情況。由于數(shù)據(jù)訪問頻度很低,大量的page都處于LRU鏈表的尾端。所以無論dump的page被加載到head或是midpoint位置,都會在熱點數(shù)據(jù)的前面。也就是說無論怎樣,數(shù)據(jù)page都會被淘汰。所以,這種壓力環(huán)境下的性能同樣不會隨著time值的配置變化有很大浮動。

真正能夠享受到time帶來的福利的是那些 處于midpoint邊緣的不溫不火的數(shù)據(jù)。

從下圖也可以看出,性能提升最大的情況集中在中等訪問量的情況下,也即 37%的位置上

三、 Mid Point位置帶來的影響

從之前的分析也可以得出這樣的結(jié)論:innodb_old_blocks_time 的作用范圍對page的冷熱情況有直接聯(lián)系。而innodb_old_blocks_pct 又決定了BP的數(shù)據(jù)分布。

那么 innodb_old_blocks_pct 的調(diào)節(jié),能夠左右 innodb_old_blocks_time的影響范圍。

上圖的曲線也證明了這樣的觀點。當innodb_old_blocks_pct 調(diào)節(jié)到60%時,波峰也相應(yīng)平移到了 60%的位置。

總結(jié):
1. innodb_old_blocks_time =1000 一定程度上可以降低mysqldump類型的訪問對數(shù)據(jù)庫性能帶來的影響。
2. innodb_old_blocks_time =1000 的優(yōu)化效果有限,對于處于midpoint附近的page能帶來最大的提升效果。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 琼中| 蕲春县| 台州市| 稻城县| 松溪县| 东乌珠穆沁旗| 香港 | 林西县| 含山县| 平阳县| 平果县| 福泉市| 广南县| 大新县| 东平县| 上虞市| 奇台县| 屏东县| 菏泽市| 拜城县| 林州市| 克拉玛依市| 天水市| 修武县| 砀山县| 望奎县| 安达市| 正镶白旗| 芮城县| 壶关县| 科技| 保山市| 陇西县| 兴安盟| 秦安县| 新绛县| 乌兰县| 斗六市| 昌吉市| 峨眉山市| 德阳市|