29.12.4.1 Таблица events_waits_current
Таблица events_waits_current содержит текущие события ожидания. Таблица хранит по одной строке на каждый поток, отображая текущий статус последнего отслеженного события ожидания потока, поэтому нет системной переменной для настройки размера таблицы.
Из таблиц, содержащих строки с событиями ожидания, events_waits_current является самой фундаментальной. Другие таблицы, содержащие строки с событиями ожидания, логически выводятся из текущих событий. Например, таблицы events_waits_history и events_waits_history_long представляют собой коллекции завершившихся событий ожидания, до максимального количества строк на поток и глобально по всем потокам, соответственно.
Более подробную информацию об отношениях между тремя таблицами событий ожидания см. в разделе 29.9 «Таблицы Performance Schema для текущих и исторических событий».
Информацию о настройке сбора событий ожидания см. в разделе 29.12.4 «Таблицы событий ожидания Performance Schema».
Таблица events_waits_current имеет следующие столбцы:
-
THREAD_ID,EVENT_IDПоток, связанный с событием, и номер текущего события потока в момент начала события. Значения
THREAD_IDиEVENT_IDвместе однозначно идентифицируют строку. Никакие две строки не имеют одинаковой пары значений. -
END_EVENT_IDЭтот столбец устанавливается в значение
NULLпри старте события и обновляется до номера текущего события потока при завершении события. -
EVENT_NAMEИмя инструмента, который произвел событие. Это значение
NAMEиз таблицыsetup_instruments. Имена инструментов могут иметь несколько частей и образовывать иерархию, как описано в разделе 29.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.Обсуждение пикосекунд как единицы измерения времени событий и факторов, влияющих на значения времени, см. в разделе 29.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Зарезервировано для будущего использования.
Таблица events_waits_current имеет следующие индексы:
Первичный ключ по (
THREAD_ID,EVENT_ID)
TRUNCATE TABLE разрешён для таблицы events_waits_current. Он удаляет строки.
© 2025 Oracle
Licensed under the GPLv2 License.