為了減少伺服器重新啟動後的暖機期間,InnoDB
會在伺服器關閉時儲存每個緩衝池最近使用頁面的百分比,並在伺服器啟動時還原這些頁面。儲存的最近使用頁面的百分比由 innodb_buffer_pool_dump_pct
配置選項定義。
在重新啟動忙碌的伺服器之後,通常會有一個暖機期間,其輸送量會穩定增加,因為緩衝池中的磁碟頁面會被帶回記憶體中(因為會查詢、更新等等相同的資料)。在啟動時還原緩衝池的能力會縮短暖機期間,方法是重新載入重新啟動之前緩衝池中的磁碟頁面,而不是等待 DML 作業存取對應的列。此外,I/O 要求可以成批執行,使整體 I/O 更快。頁面載入在背景中發生,不會延遲資料庫啟動。
除了在關機時儲存緩衝池狀態並在啟動時還原之外,您也可以在伺服器執行時隨時儲存和還原緩衝池狀態。例如,您可以在穩定的工作負載下達到穩定輸送量後儲存緩衝池的狀態。您也可以在執行報表或維護工作之後還原先前的緩衝池狀態,這些工作會將僅用於這些操作的資料頁面帶入緩衝池,或在執行其他非典型工作負載之後還原。
即使緩衝池的大小可能達到數 GB,InnoDB
儲存到磁碟的緩衝池資料相較之下非常小。只會將定位適當頁面所需的表格空間 ID 和頁面 ID 儲存到磁碟。此資訊是從 INNODB_BUFFER_PAGE_LRU
INFORMATION_SCHEMA
表格衍生而來。依預設,表格空間 ID 和頁面 ID 資料會儲存在名為 ib_buffer_pool
的檔案中,該檔案會儲存到 InnoDB
資料目錄。可以使用 innodb_buffer_pool_filename
配置參數來修改檔案名稱和位置。
由於資料會快取並從緩衝池中老化,就像一般資料庫操作一樣,因此如果最近更新了磁碟頁面,或者 DML 作業涉及尚未載入的資料,則沒有問題。載入機制會跳過不再存在的請求頁面。
底層機制涉及分派背景執行緒來執行傾印和載入作業。
來自壓縮表格的磁碟頁面會以其壓縮形式載入緩衝池。在 DML 作業期間存取頁面內容時,會像往常一樣解壓縮頁面。由於解壓縮頁面是 CPU 密集型程序,因此並行處理在連線執行緒中執行該操作,而不是在執行緩衝池還原操作的單一執行緒中執行該操作效率更高。
與儲存和還原緩衝池狀態相關的操作在以下主題中描述
在從緩衝池傾印頁面之前,您可以設定要傾印的最近使用緩衝池頁面的百分比,方法是設定 innodb_buffer_pool_dump_pct
選項。如果您計劃在伺服器運行時傾印緩衝池頁面,則可以動態配置此選項。
SET GLOBAL innodb_buffer_pool_dump_pct=40;
如果您計劃在伺服器關閉時傾印緩衝池頁面,請在您的設定檔中設定 innodb_buffer_pool_dump_pct
。
[mysqld]
innodb_buffer_pool_dump_pct=40
innodb_buffer_pool_dump_pct
的預設值為 25(傾印最近使用頁面的 25%)。
要在伺服器關閉時儲存緩衝池的狀態,請在關閉伺服器之前發出以下陳述式
SET GLOBAL innodb_buffer_pool_dump_at_shutdown=ON;
innodb_buffer_pool_dump_at_shutdown
預設為啟用。
要在伺服器啟動時還原緩衝池狀態,請在啟動伺服器時指定 --innodb-buffer-pool-load-at-startup
選項
mysqld --innodb-buffer-pool-load-at-startup=ON;
要在 MySQL 伺服器運行時儲存緩衝池的狀態,請發出以下陳述式
SET GLOBAL innodb_buffer_pool_dump_now=ON;
要在 MySQL 運行時還原緩衝池狀態,請發出以下陳述式
SET GLOBAL innodb_buffer_pool_load_now=ON;
要在將緩衝池狀態儲存到磁碟時顯示進度,請發出以下陳述式
SHOW STATUS LIKE 'Innodb_buffer_pool_dump_status';
如果操作尚未開始,則會傳回 “not started”。如果操作已完成,則會列印完成時間(例如,Finished at 110505 12:18:02)。如果操作正在進行中,則會提供狀態資訊(例如,Dumping buffer pool 5/7, page 237/2873)。
要在載入緩衝池時顯示進度,請發出以下陳述式
SHOW STATUS LIKE 'Innodb_buffer_pool_load_status';
如果操作尚未開始,則會傳回 “not started”。如果操作已完成,則會列印完成時間(例如,Finished at 110505 12:23:24)。如果操作正在進行中,則會提供狀態資訊(例如,Loaded 123/22301 pages)。
您可以使用 效能綱要 監控緩衝池載入進度。
以下範例示範如何啟用 stage/innodb/buffer pool load
階段事件工具和相關的消費者表格,以監控緩衝池載入進度。
有關此範例中使用的緩衝池傾印和載入程序的信息,請參閱 第 17.8.3.6 節,「儲存和還原緩衝池狀態」。有關效能綱要階段事件工具和相關消費者的資訊,請參閱 第 29.12.5 節,「效能綱要階段事件表格」。
啟用
stage/innodb/buffer pool load
工具mysql> UPDATE performance_schema.setup_instruments SET ENABLED = 'YES' WHERE NAME LIKE 'stage/innodb/buffer%';
啟用階段事件消費者表格,其中包括
events_stages_current
、events_stages_history
和events_stages_history_long
。mysql> UPDATE performance_schema.setup_consumers SET ENABLED = 'YES' WHERE NAME LIKE '%stages%';
透過啟用
innodb_buffer_pool_dump_now
來傾印目前的緩衝池狀態。mysql> SET GLOBAL innodb_buffer_pool_dump_now=ON;
檢查緩衝池傾印狀態以確保操作已完成。
mysql> SHOW STATUS LIKE 'Innodb_buffer_pool_dump_status'\G *************************** 1. row *************************** Variable_name: Innodb_buffer_pool_dump_status Value: Buffer pool(s) dump completed at 150202 16:38:58
透過啟用
innodb_buffer_pool_load_now
來載入緩衝池mysql> SET GLOBAL innodb_buffer_pool_load_now=ON;
透過查詢效能綱要
events_stages_current
表格,檢查緩衝池載入操作的目前狀態。WORK_COMPLETED
欄顯示已載入的緩衝池頁面數量。WORK_ESTIMATED
欄提供剩餘工作量的估計值(以頁面為單位)。mysql> SELECT EVENT_NAME, WORK_COMPLETED, WORK_ESTIMATED FROM performance_schema.events_stages_current; +-------------------------------+----------------+----------------+ | EVENT_NAME | WORK_COMPLETED | WORK_ESTIMATED | +-------------------------------+----------------+----------------+ | stage/innodb/buffer pool load | 5353 | 7167 | +-------------------------------+----------------+----------------+
如果緩衝池載入操作已完成,則
events_stages_current
表格會傳回空集合。在這種情況下,您可以檢查events_stages_history
表格,以檢視已完成事件的資料。例如mysql> SELECT EVENT_NAME, WORK_COMPLETED, WORK_ESTIMATED FROM performance_schema.events_stages_history; +-------------------------------+----------------+----------------+ | EVENT_NAME | WORK_COMPLETED | WORK_ESTIMATED | +-------------------------------+----------------+----------------+ | stage/innodb/buffer pool load | 7167 | 7167 | +-------------------------------+----------------+----------------+
您也可以在使用 innodb_buffer_pool_load_at_startup
在啟動時載入緩衝池時,使用效能綱要監控緩衝池載入進度。在這種情況下,必須在啟動時啟用 stage/innodb/buffer pool load
工具和相關的消費者。有關詳細資訊,請參閱 第 29.3 節,「效能綱要啟動設定」。