下列範例示範如何使用 Performance Schema 和 sys schema 來監控 MySQL 記憶體用量。
大多數 Performance Schema 記憶體檢測預設為停用。檢測可以透過更新 Performance Schema setup_instruments 資料表的 ENABLED 欄位來啟用。記憶體檢測的名稱格式為 memory/,其中 程式碼區塊/檢測名稱程式碼區塊 是諸如 sql 或 innodb 之類的值,而 檢測名稱 是檢測詳細資訊。
若要檢視可用的 MySQL 記憶體檢測,請查詢 Performance Schema
setup_instruments資料表。下列查詢會傳回所有程式碼區塊的數百個記憶體檢測。mysql> SELECT * FROM performance_schema.setup_instruments WHERE NAME LIKE '%memory%';您可以透過指定程式碼區塊來縮小結果範圍。例如,您可以透過指定
innodb作為程式碼區塊,將結果限制為InnoDB記憶體檢測。mysql> SELECT * FROM performance_schema.setup_instruments WHERE NAME LIKE '%memory/innodb%'; +-------------------------------------------+---------+-------+ | NAME | ENABLED | TIMED | +-------------------------------------------+---------+-------+ | memory/innodb/adaptive hash index | NO | NO | | memory/innodb/buf_buf_pool | NO | NO | | memory/innodb/dict_stats_bg_recalc_pool_t | NO | NO | | memory/innodb/dict_stats_index_map_t | NO | NO | | memory/innodb/dict_stats_n_diff_on_level | NO | NO | | memory/innodb/other | NO | NO | | memory/innodb/row_log_buf | NO | NO | | memory/innodb/row_merge_sort | NO | NO | | memory/innodb/std | NO | NO | | memory/innodb/trx_sys_t::rw_trx_ids | NO | NO | ...根據您的 MySQL 安裝,程式碼區塊可能包括
performance_schema、sql、client、innodb、myisam、csv、memory、blackhole、archive、partition等。若要啟用記憶體檢測,請將
performance-schema-instrument規則新增至您的 MySQL 組態檔。例如,若要啟用所有記憶體檢測,請將此規則新增至您的組態檔並重新啟動伺服器performance-schema-instrument='memory/%=COUNTED'注意在啟動時啟用記憶體檢測可確保會計算在啟動時發生的記憶體配置。
重新啟動伺服器之後,Performance Schema
setup_instruments資料表的ENABLED欄位應針對您啟用的記憶體檢測報告YES。setup_instruments資料表中的TIMED欄位會針對記憶體檢測遭到忽略,因為記憶體操作不會計時。mysql> SELECT * FROM performance_schema.setup_instruments WHERE NAME LIKE '%memory/innodb%'; +-------------------------------------------+---------+-------+ | NAME | ENABLED | TIMED | +-------------------------------------------+---------+-------+ | memory/innodb/adaptive hash index | NO | NO | | memory/innodb/buf_buf_pool | NO | NO | | memory/innodb/dict_stats_bg_recalc_pool_t | NO | NO | | memory/innodb/dict_stats_index_map_t | NO | NO | | memory/innodb/dict_stats_n_diff_on_level | NO | NO | | memory/innodb/other | NO | NO | | memory/innodb/row_log_buf | NO | NO | | memory/innodb/row_merge_sort | NO | NO | | memory/innodb/std | NO | NO | | memory/innodb/trx_sys_t::rw_trx_ids | NO | NO | ...查詢記憶體檢測資料。在此範例中,記憶體檢測資料會在 Performance Schema
memory_summary_global_by_event_name資料表中查詢,該資料表會依EVENT_NAME摘要資料。EVENT_NAME是檢測的名稱。下列查詢會傳回
InnoDB緩衝池的記憶體資料。如需欄位描述,請參閱 第 29.12.20.10 節,「記憶體摘要資料表」。mysql> SELECT * FROM performance_schema.memory_summary_global_by_event_name WHERE EVENT_NAME LIKE 'memory/innodb/buf_buf_pool'\G EVENT_NAME: memory/innodb/buf_buf_pool COUNT_ALLOC: 1 COUNT_FREE: 0 SUM_NUMBER_OF_BYTES_ALLOC: 137428992 SUM_NUMBER_OF_BYTES_FREE: 0 LOW_COUNT_USED: 0 CURRENT_COUNT_USED: 1 HIGH_COUNT_USED: 1 LOW_NUMBER_OF_BYTES_USED: 0 CURRENT_NUMBER_OF_BYTES_USED: 137428992 HIGH_NUMBER_OF_BYTES_USED: 137428992相同的基礎資料可以使用
sysschemamemory_global_by_current_bytes資料表來查詢,該資料表會顯示伺服器中目前全域的記憶體用量,並依配置類型細分。mysql> SELECT * FROM sys.memory_global_by_current_bytes WHERE event_name LIKE 'memory/innodb/buf_buf_pool'\G *************************** 1. row *************************** event_name: memory/innodb/buf_buf_pool current_count: 1 current_alloc: 131.06 MiB current_avg_alloc: 131.06 MiB high_count: 1 high_alloc: 131.06 MiB high_avg_alloc: 131.06 MiB此
sysschema 查詢會依程式碼區塊彙總目前配置的記憶體 (current_alloc)mysql> SELECT SUBSTRING_INDEX(event_name,'/',2) AS code_area, FORMAT_BYTES(SUM(current_alloc)) AS current_alloc FROM sys.x$memory_global_by_current_bytes GROUP BY SUBSTRING_INDEX(event_name,'/',2) ORDER BY SUM(current_alloc) DESC; +---------------------------+---------------+ | code_area | current_alloc | +---------------------------+---------------+ | memory/innodb | 843.24 MiB | | memory/performance_schema | 81.29 MiB | | memory/mysys | 8.20 MiB | | memory/sql | 2.47 MiB | | memory/memory | 174.01 KiB | | memory/myisam | 46.53 KiB | | memory/blackhole | 512 bytes | | memory/federated | 512 bytes | | memory/csv | 512 bytes | | memory/vio | 496 bytes | +---------------------------+---------------+關於
sys綱要的更多資訊,請參閱第 30 章,MySQL sys 綱要。