29.12.20.10 Таблицы сводной информации о памяти
Модуль Performance Schema отслеживает использование памяти и агрегирует статистику использования памяти, детализируя эти факторы:
Тип используемой памяти (различные кэши, внутренние буферы и т. д.)
Поток, учётная запись, пользователь, хост, косвенно выполняющие операцию с памятью
Модуль Performance Schema отслеживает следующие аспекты использования памяти:
Размеры используемой памяти
Количество операций
Минимальные и максимальные значения
Размеры памяти помогают понять или настроить потребление памяти сервером.
Количество операций помогает понять или настроить общее давление, оказываемое сервером на менеджер памяти, что влияет на производительность. Выделение одного байта миллион раз — это не то же самое, что выделение миллиона байт один раз; отслеживание как размеров, так и количества операций может раскрыть разницу.
Минимальные и максимальные значения критически важны для выявления пиковых нагрузок, стабильности общей нагрузки и возможных утечек памяти.
Таблицы сводной информации о памяти не содержат временной информации, поскольку события памяти не отслеживаются по времени.
Подробную информацию о сборе данных об использовании памяти см. в разделе Поведение инструментации памяти.
Пример сводной информации о событиях памяти:
mysql> SELECT *
FROM performance_schema.memory_summary_global_by_event_name
WHERE EVENT_NAME = 'memory/sql/TABLE'\G
*************************** 1. row ***************************
EVENT_NAME: memory/sql/TABLE
COUNT_ALLOC: 1381
COUNT_FREE: 924
SUM_NUMBER_OF_BYTES_ALLOC: 2059873
SUM_NUMBER_OF_BYTES_FREE: 1407432
LOW_COUNT_USED: 0
CURRENT_COUNT_USED: 457
HIGH_COUNT_USED: 461
LOW_NUMBER_OF_BYTES_USED: 0
CURRENT_NUMBER_OF_BYTES_USED: 652441
HIGH_NUMBER_OF_BYTES_USED: 669269
Каждая таблица сводной информации о памяти имеет один или несколько группирующих столбцов, чтобы указать, как таблица агрегирует события. Имена событий соответствуют именам инструментов событий в таблице setup_instruments:
memory_summary_by_account_by_event_nameимеет столбцыUSER,HOSTиEVENT_NAME. Каждая строка сводит события для заданной учётной записи (сочетания пользователя и хоста) и имени события.memory_summary_by_host_by_event_nameимеет столбцыHOSTиEVENT_NAME. Каждая строка сводит события для заданного хоста и имени события.memory_summary_by_thread_by_event_nameимеет столбцыTHREAD_IDиEVENT_NAME. Каждая строка сводит события для заданного потока и имени события.memory_summary_by_user_by_event_nameимеет столбцыUSERиEVENT_NAME. Каждая строка сводит события для заданного пользователя и имени события.memory_summary_global_by_event_nameимеет столбецEVENT_NAME. Каждая строка сводит события для заданного имени события.
Каждая таблица сводной информации о памяти имеет эти столбцы со сводными значениями:
-
COUNT_ALLOC,COUNT_FREEАгрегированное количество вызовов функций выделения и освобождения памяти.
-
SUM_NUMBER_OF_BYTES_ALLOC,SUM_NUMBER_OF_BYTES_FREEАгрегированные размеры выделенных и освобождённых блоков памяти.
-
CURRENT_COUNT_USEDАгрегированное количество выделенных, но не освобожденных блоков в настоящее время. Это вспомогательный столбец, равный
COUNT_ALLOC−COUNT_FREE. -
CURRENT_NUMBER_OF_BYTES_USEDАгрегированный размер выделенных, но не освобождённых блоков памяти в настоящее время. Это вспомогательный столбец, равный
SUM_NUMBER_OF_BYTES_ALLOC−SUM_NUMBER_OF_BYTES_FREE. -
LOW_COUNT_USED,HIGH_COUNT_USEDМинимальные и максимальные значения, соответствующие столбцу
CURRENT_COUNT_USED. -
LOW_NUMBER_OF_BYTES_USED,HIGH_NUMBER_OF_BYTES_USEDМинимальные и максимальные значения, соответствующие столбцу
CURRENT_NUMBER_OF_BYTES_USED.
Таблицы сводной информации о памяти имеют следующие индексы:
-
memory_summary_by_account_by_event_name:Основной ключ по (
USER,HOST,EVENT_NAME)
-
memory_summary_by_host_by_event_name:Основной ключ по (
HOST,EVENT_NAME)
-
memory_summary_by_thread_by_event_name:Основной ключ по (
THREAD_ID,EVENT_NAME)
-
memory_summary_by_user_by_event_name:Основной ключ по (
USER,EVENT_NAME)
-
memory_summary_global_by_event_name:Основной ключ по (
EVENT_NAME)
TRUNCATE TABLE разрешено для таблиц сводной информации о памяти. Оно имеет такие эффекты:
В общем случае, усечение сбрасывает базовые значения для статистики, но не изменяет состояние сервера. То есть, усечение таблицы памяти не освобождает память.
COUNT_ALLOCиCOUNT_FREEсбрасываются до нового базового значения, уменьшая каждый счётчик на одинаковое значение.Аналогично,
SUM_NUMBER_OF_BYTES_ALLOCиSUM_NUMBER_OF_BYTES_FREEсбрасываются до нового базового значения.LOW_COUNT_USEDиHIGH_COUNT_USEDсбрасываются до значенияCURRENT_COUNT_USED.LOW_NUMBER_OF_BYTES_USEDиHIGH_NUMBER_OF_BYTES_USEDсбрасываются до значенияCURRENT_NUMBER_OF_BYTES_USED.
Кроме того, каждая таблица сводной информации о памяти, агрегированная по учётной записи, хосту, пользователю или потоку, неявно усекается при усечении таблицы подключений, от которой она зависит, или при усечении таблицы memory_summary_global_by_event_name. Подробности см. в разделе 29.12.8, «Таблицы подключений Performance Schema».
Поведение инструментов мониторинга памяти
Инструменты мониторинга памяти перечислены в таблице setup_instruments и имеют имена формата memory/. Мониторинг памяти включён по умолчанию.code_area/instrument_name
Инструменты с префиксом memory/performance_schema/ отображают объём памяти, выделенной для внутренних буферов в самом Performance Schema. Инструменты memory/performance_schema/ встроенные, всегда включены и не могут быть отключены при запуске или во время выполнения. Встроенные инструменты мониторинга памяти отображаются только в таблице memory_summary_global_by_event_name.
Для управления состоянием мониторинга памяти при запуске сервера используйте такие строки в файле my.cnf:
-
Включить:
[mysqld] performance-schema-instrument='memory/%=ON'
-
Отключить:
[mysqld] performance-schema-instrument='memory/%=OFF'
Для управления состоянием мониторинга памяти во время выполнения обновите столбец ENABLED соответствующих инструментов в таблице setup_instruments:
-
Включить:
UPDATE performance_schema.setup_instruments SET ENABLED = 'YES' WHERE NAME LIKE 'memory/%';
-
Отключить:
UPDATE performance_schema.setup_instruments SET ENABLED = 'NO' WHERE NAME LIKE 'memory/%';
Для инструментов мониторинга памяти столбец TIMED в таблице setup_instruments игнорируется, так как операции с памятью не отслеживаются по времени.
Когда поток на сервере выполняет операцию выделения памяти, которая была настроена для мониторинга, применяются следующие правила:
Если поток не настроен на мониторинг или инструмент мониторинга памяти отключён, выделенный блок памяти не отслеживается.
В противном случае (то есть, и поток, и инструмент включены), выделенный блок памяти отслеживается.
Для освобождения памяти применяются следующие правила:
Если операция выделения памяти была настроена для мониторинга, соответствующая операция освобождения памяти также отслеживается, независимо от текущего состояния включения инструмента или потока.
Если операция выделения памяти не отслеживалась, соответствующая операция освобождения памяти не отслеживается, независимо от текущего состояния включения инструмента или потока.
Для статистики по потокам применяются следующие правила.
Когда выделяется отслеживаемый блок памяти размером N, Performance Schema вносит эти изменения в столбцы таблиц сводной информации о памяти:
COUNT_ALLOC: Увеличивается на 1CURRENT_COUNT_USED: Увеличивается на 1HIGH_COUNT_USED: Увеличивается, еслиCURRENT_COUNT_USED— новый максимумSUM_NUMBER_OF_BYTES_ALLOC: Увеличивается наNCURRENT_NUMBER_OF_BYTES_USED: Увеличивается наNHIGH_NUMBER_OF_BYTES_USED: Увеличивается, еслиCURRENT_NUMBER_OF_BYTES_USED— новый максимум
При освобождении отслеживаемого блока памяти Performance Schema вносит эти изменения в столбцы таблиц сводной информации о памяти:
COUNT_FREE: Увеличивается на 1CURRENT_COUNT_USED: Уменьшается на 1LOW_COUNT_USED: Уменьшается, еслиCURRENT_COUNT_USED— новый минимумSUM_NUMBER_OF_BYTES_FREE: Увеличивается наNCURRENT_NUMBER_OF_BYTES_USED: Уменьшается наNLOW_NUMBER_OF_BYTES_USED: Уменьшается, еслиCURRENT_NUMBER_OF_BYTES_USED— новый минимум
Для агрегатов более высокого уровня (глобальных, по учётной записи, пользователю, хосту) применяются те же правила, что и для минимальных и максимальных значений.
LOW_COUNT_USEDиLOW_NUMBER_OF_BYTES_USEDявляются оценочными значениями. Значение, предоставляемое Performance Schema, гарантированно меньше или равно самому низкому количеству или размеру фактически используемой памяти во время выполнения.HIGH_COUNT_USEDиHIGH_NUMBER_OF_BYTES_USEDявляются оценочными значениями. Значение, предоставляемое Performance Schema, гарантированно больше или равно самому высокому количеству или размеру фактически используемой памяти во время выполнения.
Для оценочных значений в таблицах сводной информации, кроме memory_summary_global_by_event_name, значения могут стать отрицательными, если права владения памятью передаются между потоками.
Вот пример вычисления оценки; обратите внимание, что реализация оценки может меняться:
Поток 1 использует память в диапазоне от 1 МБ до 2 МБ во время выполнения, как указано в столбцах LOW_NUMBER_OF_BYTES_USED и HIGH_NUMBER_OF_BYTES_USED таблицы memory_summary_by_thread_by_event_name.
Поток 2 использует память в диапазоне от 10 МБ до 12 МБ во время выполнения, аналогично.
Когда эти два потока принадлежат одной учётной записи пользователя, оценки по учётной записи указывают, что эта учётная запись использовала память в диапазоне от 11 МБ до 14 МБ. То есть, LOW_NUMBER_OF_BYTES_USED для агрегата более высокого уровня — сумма каждого LOW_NUMBER_OF_BYTES_USED (в предположении худшего случая). Аналогично, HIGH_NUMBER_OF_BYTES_USED для агрегата более высокого уровня — сумма каждого HIGH_NUMBER_OF_BYTES_USED (в предположении худшего случая).
11 МБ — это нижняя оценка, которая может произойти только если оба потока достигли минимального использования одновременно.
14 МБ — это верхняя оценка, которая может произойти только если оба потока достигли максимального использования одновременно.
Фактическое использование памяти этой учётной записью могло составлять от 11,5 МБ до 13,5 МБ.
Для планирования ресурсов желательно сообщать худший случай, так как это показывает, что может произойти, когда сеансы не скоррелированы, что обычно и происходит.
© 2025 Oracle
Licensed under the GPLv2 License.