Spec-Zone.ru › MySQL 5.7

25.12.15.9 Таблицы сводки памяти

Модуль 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.

Разрешено использование 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. Подробности см. в разделе Раздел 25.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: Увеличено на 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-5.7-en/performance-schema-memory-summary-tables.html

Spec-Zone.ru

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