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.