給從庫預熱innodb buffer pool
最近在生產上做了一個 mysql 主從切換的操作,當從庫提升為主後,發現從庫一開始壓力異常大,分析原因應該是從庫的 innodb_buffer_pool 的熱資料沒有立即載入進來,導致發生大量磁碟讀了。我們的 innodb_buffer_pool 設定大小為 42G ,所以大約持續了 100 分鐘,才使得業務恢復正常。
後來想想應該可以把主庫 innodb buffer pool 裡面的熱資料 dump 成磁碟檔案,然後把這個磁碟檔案複製到從庫,讓從庫從 dump 出的這個磁碟檔案把熱資料載入到從庫的 innodb buffer pool 裡面。於是我檢視 MySQL 官方文件,並找到了這樣的解決辦法。
具體步驟如下 :
1 )在主庫上,執行如下命令,把 innodb_buffer_pool_dump_pct 設定成 40% ,表示要把 innodb buffer pool 40% (根據情況也可以設定為 100% )的熱資料 dump 到磁碟檔案 /data/ib_buffer_pool 裡面:
mysql>SET GLOBAL innodb_buffer_pool_dump_pct=40;
2 )在主庫上,執行如下命令把 innodb buffer pool 裡面 40% 的熱資料 dump 到磁碟檔案 /data/ib_buffer_pool 裡面:
mysql> SET GLOBAL innodb_buffer_pool_dump_now=ON;
3 )在主庫上,執行如下命令顯示 dump 的進度,直至看到 completed 完成字樣為止:
mysql>SHOW STATUS LIKE 'Innodb_buffer_pool_dump_status';
4 )把主庫 /data/ib_buffer_pool 磁碟檔案複製到從庫的 /data 目錄下:
5 )在從庫上,執行如下命令,把 /data/ib_buffer_pool 裡面的熱資料載入到 innodb buffer pool
mysql>SET GLOBAL innodb_buffer_pool_load_now=ON;
6 ) 在從庫上,執行如下命令顯示 load 的進度
mysql>SHOW STATUS LIKE 'Innodb_buffer_pool_load_status';
7 )在從庫上,執行如下命令,看從庫的 LRU LIST 裡面有多少個頁了:
mysql> select count(*) from information_schema.INNODB_BUFFER_PAGE_LRU ;
8 ) 當看到從庫的 load 進度顯示完成字樣時,就可以進行主從切換的動作了,先把主庫關閉,並等待從庫應用完 relay log 後,把 vip 繫結到從庫上,從而完成了手工主從切換資料庫。切換後,從庫的執行效能和主庫一樣,對業務影響非常小。
參考文件:
https://dev.mysql.com/doc/refman/8.0/en/innodb-preload-buffer-pool.html
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28916011/viewspace-2199483/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MySQL innodb_buffer_pool_size 變數MySql變數
- InnoDB 中的緩衝池(Buffer Pool)
- ubuntu 命令列更改innodb_buffer_pool_sizeUbuntu命令列
- 計算innodb_buffer_pool使用率
- Innodb特性之Read-Ahead(Buffer Pool Prefetching)
- MySQL innodb buffer pool 命中率以及快取了哪些 InnoDB TableMySql快取
- InnoDB Buffer Pool改進LRU頁面置換
- MySQL服務端innodb_buffer_pool_size配置引數MySql服務端
- MySQL 8.0 Reference Manual(讀書筆記70節--InnoDB Buffer Pool Configuration (1))MySql筆記
- MySQL 8.0 Reference Manual(讀書筆記71節--InnoDB Buffer Pool Configuration (2))MySql筆記
- MySQL 8.0 Reference Manual(讀書筆記72節--InnoDB Buffer Pool Configuration (3))MySql筆記
- ALTER SYSTEM FLUSH BUFFER_POOL
- Innodb特性之change buffer
- MySQL入門--記憶體buffer poolMySql記憶體
- MySQL中讀頁緩衝區buffer poolMySql
- MySQL原理簡介—4.深入分析Buffer PoolMySql
- MySQL怎麼緩解讀的壓力的?---buffer poolMySql
- CMU15445 (Fall 2019) 之 Project#1 - Buffer Pool 詳解Project
- 怎麼解決因全表掃描帶來的 Buffer Pool 汙染
- 面試題:你有沒有搞混查詢快取和Buffer Pool?談談看!面試題快取
- [20200212]使用DBMS_SHARED_POOL.MARKHOT標識熱物件.txt物件
- MySQL:一段innodb buffer instance和cleaner執行緒計算邏輯MySql執行緒
- InnoDB從內分析之Row(一)
- InnoDB從內分析之Page(二)
- [20200213]使用DBMS_SHARED_POOL.MARKHOT標識熱物件2.txt物件
- mysql儲存引擎InnoDB詳解,從底層看清InnoDB資料結構MySql儲存引擎資料結構
- InnoDB從內分析之區和段(三)
- large pool
- InnoDB學習(六)之資料庫鎖資料庫
- 透過預熱來最佳化PG資料庫的SQL效能資料庫SQL
- [20231023]備庫與alter system flush buffer_cache.txt
- golang work poolGolang
- IO之核心buffer----"buffer cache"
- MySQL資料庫innodb_fast_shutdown引數MySql資料庫AST
- [20200217]使用snapper探究DBMS_SHARED_POOL.MARKHOT標識熱物件的等待事件.txtAPP物件事件
- MySQL 資料庫的提速器-寫快取(Change Buffer)MySql資料庫快取
- protocol bufferProtocol
- 【node】Buffer