Spec-Zone.ru › MySQL 9.2

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.
https://docs.oracle.com/cd/E17952_01/mysql-9.2-en/performance-schema-events-waits-current-table.html

Spec-Zone.ru

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