以下範例示範如何使用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
綱要的memory_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
綱要查詢會依程式碼區域彙總目前已配置的記憶體 (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 綱要」。