10.12.3.2 Мониторинг использования памяти MySQL
Следующий пример демонстрирует, как использовать Performance Schema и sys schema для мониторинга использования памяти MySQL.
Большинство инструментов Performance Schema для измерения памяти по умолчанию отключены. Инструменты можно включить, обновив столбец ENABLED таблицы Performance Schema setup_instruments. Инструменты измерения памяти имеют имена в формате memory/, где code_area/instrument_namecode_area — значение, такое как sql или innodb, а instrument_name — детали инструмента.
-
Чтобы просмотреть доступные инструменты измерения памяти MySQL, запросите таблицу Performance Schema
setup_instruments. Следующий запрос возвращает сотни инструментов измерения памяти для всех областей кода.mysql>
SELECT * FROM performance_schema.setup_instrumentsWHERE NAME LIKE '%memory%';Вы можете сузить результаты, указав область кода. Например, вы можете ограничить результаты инструментами измерения памяти
InnoDB, указавinnodbкак область кода.mysql>
SELECT * FROM performance_schema.setup_instrumentsWHERE 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'
ПримечаниеВключение инструментов измерения памяти при запуске гарантирует, что выделение памяти, происходящее при запуске, будет учтено.
После перезапуска сервера столбец
ENABLEDтаблицы Performance Schemasetup_instrumentsдолжен сообщатьYESдля инструментов измерения памяти, которые вы включили. СтолбецTIMEDв таблицеsetup_instrumentsигнорируется для инструментов измерения памяти, так как операции с памятью не измеряются по времени.mysql>
SELECT * FROM performance_schema.setup_instrumentsWHERE 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_nameWHERE EVENT_NAME LIKE 'memory/innodb/buf_buf_pool'\GEVENT_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Те же самые основополагающие данные можно запросить, используя схему
sysmemory_global_by_current_bytesтаблицу, которая показывает текущее использование памяти на глобальном уровне сервера, разбивая по типу выделения.mysql>
SELECT * FROM sys.memory_global_by_current_bytesWHERE 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) AScode_area, FORMAT_BYTES(SUM(current_alloc))AS current_allocFROM sys.x$memory_global_by_current_bytesGROUP 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 Schema.
© 2025 Oracle
Licensed under the GPLv2 License.