下列範例示範如何使用 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
相同的基礎資料可以使用
sys
schemamemory_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
此
sys
schema 查詢會依程式碼區塊彙總目前配置的記憶體 (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 綱要。