Spec-Zone.ru › MySQL 9.2

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».

END_OF_DOCUMENT_MARKER
Поведение инструментов мониторинга памяти

Инструменты мониторинга памяти перечислены в таблице 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: Увеличивается на 1

  • CURRENT_COUNT_USED: Увеличивается на 1

  • HIGH_COUNT_USED: Увеличивается, если CURRENT_COUNT_USED — новый максимум

  • SUM_NUMBER_OF_BYTES_ALLOC: Увеличивается на N

  • CURRENT_NUMBER_OF_BYTES_USED: Увеличивается на N

  • HIGH_NUMBER_OF_BYTES_USED: Увеличивается, если CURRENT_NUMBER_OF_BYTES_USED — новый максимум

При освобождении отслеживаемого блока памяти Performance Schema вносит эти изменения в столбцы таблиц сводной информации о памяти:

  • COUNT_FREE: Увеличивается на 1

  • CURRENT_COUNT_USED: Уменьшается на 1

  • LOW_COUNT_USED: Уменьшается, если CURRENT_COUNT_USED — новый минимум

  • SUM_NUMBER_OF_BYTES_FREE: Увеличивается на N

  • CURRENT_NUMBER_OF_BYTES_USED: Уменьшается на N

  • LOW_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.
https://docs.oracle.com/cd/E17952_01/mysql-9.2-en/performance-schema-memory-summary-tables.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API