原文鏈接:https://www.modb.co/db/24698 (復制鏈接至瀏覽器,即可查看)
摘要:MySQL 正常情況下關閉啟動服務的時候為什么慢,想過嗎! 帶著疑問,看下下面的查證
有一次,在客戶現場,調優的時候發現配置128G內存服務器,但innodb_buffer_pool_size 設置 4G 和100G的情況下,發現關機啟動的時候非常慢?突然蒙了,沒碰到過這樣的場景。帶著疑問,就進行查證有如下設置。
MySQL提供關閉啟動熱數據參數:
show variables where variable_name like 'innodb_buffer_pool_dump%'
or variable_name like 'innodb_buffer_pool_load%';

在MySQL5.6里一個新特性
- innodb_buffer_pool_dump_at_shutdown = 1解釋:在關閉時把熱數據dump到本地磁盤。
- innodb_buffer_pool_dump_now = 1解釋:采用手工方式把熱數據dump到本地磁盤。
- innodb_buffer_pool_dump_pct解釋:指定每個緩沖池最近使用的頁面讀取和轉儲的百分比。 范圍是1到100。默認值是25。例如,如果有4個緩沖池,每個緩沖池有100個page,并且innodb_buffer_pool_dump_pct設置為25,則dump每個緩沖池中最近使用的25個page。
- innodb_buffer_pool_load_abort是否要中止緩沖池加載操作,默認是關閉的
- innodb_buffer_pool_load_at_startup = 1解釋:在啟動時把熱數據加載到內存。
- innodb_buffer_pool_load_now = 1解釋:采用手工方式把熱數據加載到內存。
保存緩沖區文件
關閉MySQL時,會把內存中的熱數據保存在磁盤里ib_buffer_pool文件中,位于redo日志存放的路徑innodb_log_group_home_dir數據目錄下。
查看日志,會發現:

在啟動后,會自動加載熱數據到Buffer_Pool緩沖池里。查看方式:顯示加載時間
mysql> SHOW STATUS LIKE 'Innodb_buffer_pool_load_status';

手動加載參看配置參數(innodb_buffer_pool_load_at_startup)
mysql> SHOW variables WHERE variable_name like 'innodb_buffer_pool_dump%'
-> or variable_name like 'innodb_buffer_pool_load%';

查看執行狀態:沒有進行加載
mysql>SHOW STATUS LIKE 'Innodb_buffer_pool_load_status';

手動進行加載:
mysql> set global innodb_buffer_pool_load_now=1;

這樣,始終保持熱數據在內存中。
總結:只有在正常關閉MySQL服務,或者pkill mysql時,會把熱數據dump到內存。機器宕機或者pkill -9 mysql,是不會dump。
官方說明:https://dev.mysql.com/doc/refman/5.7/en/innodb-preload-buffer-pool.html