第07問:innodb_buffer_pool_instances 是如何影響性能的?

2021-03-02 愛可生開源社區

問題:

我們都知道 innodb_buffer_pool_instances 參數,將 buffer pool 分成幾個區,每個區用獨立的鎖保護,這樣就減少了訪問 buffer pool 時需要上鎖的粒度,以提高性能。

那麼我們如何觀察它是如何影響性能呢?

實驗:在這裡我們將 performance_schema_events_waits_history_long_size 調大,是為了讓之後實驗數據能採集的更多,在此不多做介紹。

對數據進行預熱 60s,可以看到預熱期間的性能會不太穩定,預熱後會比較穩定,

設置 performance_schema,這次我們將僅開啟觀察項(生產者)hash_table_locks,並開啟 waits 相關收集端(消費者)。(相關介紹參看 實驗 03

為什麼我們知道觀察項應該選擇 hash_table_locks?在 performance_schema.setup_instruments 表中,列出了所有觀察項,但我們很難從中選出我們應觀察哪個觀察項。這時候,可以將所有觀察項都啟用,然後設計一些對比實驗,比如使用幾種不同的 SQL,觀察這些操作影響了哪些觀察項,找到共性或者區。還有一種高效的方式是搜索別人的經驗,或者閱讀 MySQL 源碼。本例中 hash_table_locks 隱藏的比較深,使用了閱讀 MySQL 源碼和對比試驗結合的方法。

由於 MySQL 有一些後臺進程會使用 buffer pool,比如刷盤線程,會影響我們的觀察,所以需要將 MySQL 的後臺線程排除在外。萬事就緒,再運行一次 sysbench 壓力。運行前記得將已有的觀察結果清除:等待壓力結束後,對 performance_schema 中記錄的數據進行分析。確實採集了 100 萬條對 hash_table_locks 的觀測數據。我們取其操作時長的平均值,90% 分位數,99% 分位數:整理到如下表格,但我們先忽略其時間單位,放到最後討論,

我們按照如上方法,分別再測試 innodb_buffer_pool_instances 為 2 和 4 的情況(記得多測幾次,取平均值會更為準確,本實驗由於偷懶,只測預熱後的一次結果)。

平均值都在 99% 分位數以上,意味著有極大的數據嚴重影響的平均值(有幾次對 buffer pool 鎖的獲取,等待了非常久)。隨著 innodb_buffer_pool_instances 增大,這種嚴重的影響會逐漸減小。在實驗的場景中,innodb_buffer_pool_instances 的增大,對 90% 和 99% 分位數影響都不大,即不會影響到大部分 SQL 對 buffer pool 鎖的獲取時間。

重要說明:

本實驗以介紹實驗手法為目的,實驗的結論不可作為參考。如果大家多做幾次實驗,會發現在同一個配置下,平均值的變化很大,也就是說那幾次非常久的等待時間非常不穩定,受到其他因素影響。如果更換數據壓力或者更換測試環境,會看到不同的現象。

我們再來看看這些時間的單位是什麼?

可以看到 wait 一族的觀察項,單位是 cycle,那麼 cycle 又是多少秒?可以看到,1 cycle = 1/2387771144 秒。我們重新看一下 innodb_buffer_pool_instances=1 時,獲取 buffer pool 鎖的平均時間是 6535546 cycle,大約是 2.7 ms。2.7 ms,還是比較長的一段時間(我的虛擬機配置比較一般)。結論

本次實驗介紹了對 innodb_buffer_pool_instances 參數對性能影響的觀測手法,大家可以在進行壓力測試時,使用此方法觀察 innodb_buffer_pool_instances 的取值對性能的影響,從而決定應該取值多少。

參數設置一直是個平衡問題,innodb_buffer_pool_instances 設置太小,鎖衝突集中;設置太大,維護成本升高。

再次強調,本次實驗僅介紹手法,結果不足取信。不同壓力,不同 buffer pool 配置,不同環境會呈現效果,唯有手法是可以傳承的。

按照正常實驗的規則,95% 分位數以上的極值可看作是實驗誤差,但對於本次實驗中的極大值進行進一步分析後,我們認為可以用於說明實驗效果。

關於 MySQL 的技術內容,你們還有什麼想知道的嗎?趕緊留言告訴小編吧!

相關焦點

  • MySQL如何計算統計redo log大小
    在MySQL中如何計算、統計重做日誌(redo log)的生成情況呢? 例如10分鐘內,生成了多少M的redo log呢?30分鐘內又生成了多少M的redo log.....。MySQL沒有像Oracle中那樣的系統視圖統計這些數據,但是我們可以通過一些方法曲線的統計二進位日誌的生成量。
  • MySQL InnoDB 索引原理
    頁(page)頁是InnoDB存儲引擎的最小管理單位,每頁大小默認是16KB,從InnoDB 1.2.x版本開始,可以利用innodb_page_size來改變頁size,但是改變只能在初始化InnoDB實例前進行修改,之後便無法進行修改,除非mysqldump導出創建新庫,常見的頁類型有:數據頁、undo頁、系統頁、事務數據頁、插入緩衝位圖頁、插入緩衝空閒列表頁、未壓縮的二進位大對象頁
  • 如何使用TensorFlow Hub的ESRGAN模型來在安卓app中生成超分圖片
    那麼在本文裡,我們將介紹一下如何使用TensorFlow Hub上的一個預訓練的 ESRGAN 模型來在一個安卓 app 中生成超分圖片。最終的 app 效果如下圖,我們也已經將完整代碼開源給大家參考。
  • 07MnNiVDR交貨狀態07MnNiVDR化學成分力學性能執行標準
    07MnNiVDR材質簡介:07MnNiVDR屬於壓力容器用調製高強度板,鋼由氧氣轉爐或電爐冶煉,並經過真空處理。07代表碳含量,Mn、Ni、V是化學元素。07MnNiVDR最新執行標準為:GB19189-2011,代替原來的GB19189-2003中的「07MnNiMoVR」。熱處理交貨狀態為:淬火+回火(調製),其回火溫度應不低於600℃。鋼板的尺寸、外形及允許偏差應符合GB/T709-2006的規定。鋼板的厚度允許偏差應符合GB/T709-2006的B類偏差。
  • 月薪3W,面試官問:詳細聊聊MySQL中 聚簇、非聚簇索引和覆蓋索引
    今天我們聊聊:之前我去面試月薪30K中級開發,某公司CTO問我的問題。適合人群:想對MySQL原理有深入進階,面試想獲得更高薪資的同學。閱讀本篇需要你具備MySQL基礎知識。前言導讀:既然你點進來了,捂住手機試問你自己,會不會。如果會了就可以就此跳過,不要浪費時間,如果不會那麼你就花點心思好好看看吧。
  • Metapool生態延伸——pool2挖礦即將上線
    Metapool自上線後參與人數和質押數每天穩定增長,空前火熱的流動性挖礦新產品一直處於測試階段,11月25日核心開發者推特表示pool2的技術測試工作已接近尾聲,將於近日上線uniswap。MetaPool 是一個創新型DeFi聚合理財挖礦平臺,共分為pool1與pool2兩個礦池,pool1為質押pETH挖出MFI,按pETH比例實時獲得;即將上線的Pool2挖礦為在Uniswap池提供ETH:MFI(50:50)流動性獲得LP,質押LP挖出MFI,按質押比例實時獲得,即通過創造流動性來挖礦。挖礦的參與方式不同,pool1與pool2挖礦產生的MFI並無差別.
  • 【譯林】死侍2 Deadpool 2 (上)
    On a much lower level, I』d take Deadpool 2 over Deadpool.往低了說,我認為就像是《死侍2》優於《死侍》。Deadpool was positioned to be the raunchy, irreverent, ultraviolent alternative to PG-13 superheroes. In every quantifiable way, he succeeded.
  • This Sunday: GET WET AND WILD: rafting+swimming in natural pool!
    Let's go swimming in a natural pool with crystal clean water in the heart of bamboo forest and rafting to a beautiful place surrounded by mountains!
  • GET WET AND WILD: rafting+swimming in natural pool! August 4th
    Let's go swimming in a natural pool with crystal clean water in the heart of bamboo forest and rafting to a beautiful place surrounded by mountains!
  • 學界| 新型池化層sort_pool2d實現更快更好的收斂:表現優於最大...
    定義一個超參數 pool_range,它可以是 [1,2,3,4] 中的任意一個。pool_range 指定激活函數(按照排列順序保存)的數量。假設要被池化的張量 T 有 4 個激活函數,我首先按照 [a1, a2, a3, a4] 的順序排列它們,其中 a1 ≥ a2 ≥ a3 ≥ a4。接著保留其中的第一個 pool_range,我稱之為激活向量。
  • 溫度變化如何影響導熱係數和保溫材料性能?
    下面我們列出一份導熱係數曲線圖表來進行解析,溫度的變化如何影響導熱係數以及影響保溫材料的性能。保溫材料使用溫度與導熱係數的曲線圖我們以氣凝膠為例,佳鴻公司的氣凝膠氈常溫25℃導熱係數標稱0.018(經客戶送第三方檢測平均值為0.0185,目前市場上能達到此參數的同類產品不多),而隨著溫度的升高,導熱係數曲線表也開始上升
  • 獵奇BL向AVG《sweet pool》將重製登陸PSV
    開發商Nitro+CHiRAL日前宣布,慶祝旗下於2008年登陸PC的大人氣BL向AVG《sweet pool》發售十周年,將移植登陸PSV,預計在2018年5月31日發售,售價6900日元(約408人民幣)。
  • 半導體工藝是如何具體影響CPU性能的?
    半導體的支持工藝和CPU的性能關係就大了,它關係到CPU內能塞進多少個電晶體,還有CPU所能達到的頻率還有它的功耗,1978年Intel推出了第一顆CPU——8086,它採用3μm(3000nm)工藝生產,只有29000個電晶體,工作頻率也只有5MHz。
  • 英語「搭順風車」是car-sharing,car-pool,還是get a lift?
    英語「搭順風車」是car-sharing,car-pool,還是get a lift?我們「學」英語,一個「很壞」的習慣就是:不管讀什麼樣的英語都必須要解決「中文是什麼」才能「學」,才能「懂」。不管你這樣做的理由是什麼,其結果只能是,它是完成我們多年英語學習始終處於「低端」的主要原因。
  • 《戰機的翅膀》③多變的機翼形狀如何影響飛行性能?
    《戰機的翅膀》③多變的機翼形狀如何影響飛行性能? 多變的機翼形狀如何影響飛行性能