Spec-Zone.ru › MySQL 5.7

25.12.4.1 Таблица events_waits_current

Таблица events_waits_current содержит текущие события ожидания. В таблице хранится по одной строке на каждый поток, отображающей текущий статус последнего отслеживаемого события ожидания потока, поэтому нет системной переменной для настройки размера таблицы.

Из таблиц, содержащих строки с событиями ожидания, events_waits_current является наиболее фундаментальной. Другие таблицы, содержащие строки с событиями ожидания, логически выводятся из текущих событий. Например, таблицы events_waits_history и events_waits_history_long являются коллекциями завершенных событий ожидания, до максимального количества строк на поток и глобально по всем потокам соответственно.

Более подробную информацию о взаимосвязи трех таблиц событий ожидания см. в разделе 25.9 «Таблицы Performance Schema для текущих и исторических событий».

Информацию о настройке сбора событий ожидания см. в разделе 25.12.4 «Таблицы Performance Schema для событий ожидания».

Таблица events_waits_current имеет следующие столбцы:

  • THREAD_ID, EVENT_ID

    Поток, связанный с событием, и текущий номер события потока в момент начала события. Значения THREAD_ID и EVENT_ID вместе однозначно идентифицируют строку. Ни две строки не имеют одинаковой пары значений.

  • END_EVENT_ID

    Этот столбец устанавливается в значение NULL при старте события и обновляется до текущего номера события потока при завершении события.

  • EVENT_NAME

    Название инструмента, который сгенерировал событие. Это значение NAME из таблицы setup_instruments. Имена инструментов могут состоять из нескольких частей и образовывать иерархию, как описано в разделе 25.6 «Конвенции наименования инструментов Performance Schema».

  • SOURCE

    Название исходного файла, содержащего инструментированный код, который сгенерировал событие, и номер строки в файле, в которой происходит инструментирование. Это позволяет проверить исходный код, чтобы точно определить, какой код участвует. Например, если блокируется мьютекс или блокировка, вы можете проверить контекст, в котором это происходит.

  • TIMER_START, TIMER_END, TIMER_WAIT

    Информация о времени события. Единица измерения этих значений — пикосекунды (триллионные доли секунды). Значения TIMER_START и TIMER_END указывают на время начала и окончания события. TIMER_WAIT — время продолжительности события (длительность).

    Если событие еще не завершено, TIMER_END — текущее значение таймера, а TIMER_WAIT — прошедшее время (TIMER_END − TIMER_START).

    Если событие генерируется инструментом, у которого TIMED = NO, информация о времени не собирается, и TIMER_START, TIMER_END и TIMER_WAIT равны NULL.

    Обсуждение пикосекунд как единицы измерения времени событий и факторов, влияющих на значения времени, см. в разделе 25.4.1 «Измерение времени событий Performance Schema».

  • SPINS

    Для мьютекса — количество циклов вращения. Если значение равно NULL, код не использует циклы вращения или вращение не инструментировано.

  • OBJECT_SCHEMA, OBJECT_NAME, OBJECT_TYPE, OBJECT_INSTANCE_BEGIN

    Эти столбцы идентифицируют объект “над которым выполняется действие.” Значение зависит от типа объекта.

    Для объекта синхронизации (cond, mutex, rwlock):

    • OBJECT_SCHEMA, OBJECT_NAME и OBJECT_TYPE являются NULL.

    • OBJECT_INSTANCE_BEGIN — адрес объекта синхронизации в памяти.

    Для объекта ввода-вывода файлов:

    • OBJECT_SCHEMA — NULL.

    • OBJECT_NAME — имя файла.

    • OBJECT_TYPE — FILE.

    • OBJECT_INSTANCE_BEGIN — адрес в памяти.

    Для объекта сокета:

    • OBJECT_NAME — значение IP:PORT для сокета.

    • OBJECT_INSTANCE_BEGIN — адрес в памяти.

    Для объекта ввода-вывода таблиц:

    • OBJECT_SCHEMA — имя схемы, содержащей таблицу.

    • OBJECT_NAME — имя таблицы.

    • OBJECT_TYPE — TABLE для постоянной таблицы базы данных или TEMPORARY TABLE для временной таблицы.

    • OBJECT_INSTANCE_BEGIN — адрес в памяти.

    Само значение OBJECT_INSTANCE_BEGIN не имеет смысла, за исключением того, что разные значения указывают на разные объекты. OBJECT_INSTANCE_BEGIN может использоваться для отладки. Например, его можно использовать с GROUP BY OBJECT_INSTANCE_BEGIN, чтобы увидеть, равномерно распределена ли нагрузка на 1000 мьютексов (например, защищающих 1000 страниц или блоков данных) или попадает ли она на несколько узких мест. Это может помочь вам сопоставить данные с другими источниками информации, если вы видите тот же адрес объекта в файле журнала или другом инструменте отладки или производительности.

  • INDEX_NAME

    Название используемого индекса. PRIMARY обозначает первичный индекс таблицы. NULL означает, что индекс не использовался.

  • NESTING_EVENT_ID

    Значение EVENT_ID события, в рамках которого вложено данное событие.

  • NESTING_EVENT_TYPE

    Тип события вложенности. Значение — TRANSACTION, STATEMENT, STAGE или WAIT.

  • OPERATION

    Тип операции, например, lock, read или write.

  • NUMBER_OF_BYTES

    Количество байтов, считанных или записанных операцией. Для операций ввода-вывода таблиц (событий для инструмента wait/io/table/sql/handler) NUMBER_OF_BYTES указывает количество строк. Если значение больше 1, событие относится к операции пакетного ввода-вывода. Следующее обсуждение описывает разницу между исключительно отчетом по одной строке и отчетом, отражающим операции пакетного ввода-вывода.

    MySQL выполняет соединения с помощью реализации вложенного цикла. Задача инструментирования Performance Schema — предоставить количество строк и суммарное время выполнения на таблицу в соединении. Предположим запрос соединения следующей формы, выполняемый с порядком соединения таблиц t1, t2, t3:

    SELECT ... FROM t1 JOIN t2 ON ... JOIN t3 ON ...
    

    Таблица “fanout” — это увеличение или уменьшение количества строк при добавлении таблицы во время обработки соединения. Если показатель fanout для таблицы t3 больше 1, большинство операций извлечения строк выполняются для этой таблицы. Предположим, что соединение обращается к 10 строкам из t1, 20 строкам из t2 на каждую строку из t1 и 30 строкам из t3 на каждую строку таблицы t2. При отчете по одной строке общее количество инструментированных операций:

    10 + (10 * 20) + (10 * 20 * 30) = 6210
    

    Значительное сокращение количества инструментированных операций достигается путем их агрегирования по сканированию (то есть по каждой уникальной комбинации строк из t1 и t2). При отчете о пакетном вводе-выводе Performance Schema генерирует событие для каждого сканирования внутренней таблицы t3, а не для каждой строки, и количество инструментированных операций со строками уменьшается до:

    10 + (10 * 20) + (10 * 20) = 410
    

    Это сокращение на 93%, демонстрирующее, как стратегия отчета о пакетном вводе-выводе существенно снижает нагрузку Performance Schema для операций ввода-вывода таблиц, уменьшая количество вызовов отчета. Компромисс заключается в снижении точности измерения времени событий. Вместо времени отдельной операции с строкой, как при отчете по строке, время пакетного ввода-вывода включает время, затраченное на такие операции, как буферизация соединения, агрегация и возврат строк клиенту.

    Для того чтобы произошел отчет о пакетном вводе-выводе, должны выполняться следующие условия:

    • Выполнение запроса обращается к внутренней таблице блока запроса (для запроса к одной таблице эта таблица считается внутренней)

    • Выполнение запроса не запрашивает одну строку из таблицы (следовательно, например, доступ eq_ref предотвращает использование пакетного отчета)

    • Выполнение запроса не оценивает подзапрос, содержащий доступ к таблице для таблицы

  • FLAGS

    Зарезервировано для будущих применений.

TRUNCATE TABLE разрешено для таблицы events_waits_current. Оно удаляет строки.

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-5.7-en/performance-schema-events-waits-current-table.html

Spec-Zone.ru

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