Spec-Zone.ru › MySQL 8.4

29.12.3.3 Таблица mutex_instances

Таблица mutex_instances перечисляет все мьютексы, увиденные Performance Schema во время выполнения сервера. Мьютекс — это механизм синхронизации, используемый в коде для обеспечения того, чтобы только один поток в данный момент имел доступ к некоторому общему ресурсу. Ресурс считается “защищённым” мьютексом.

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

Работа, выполняемая при удерживании мьютекса, называется “критической секцией”, и несколько запросов выполняют эту критическую секцию последовательно (по одному за раз), что является потенциальной узкой точкой.

В таблице mutex_instances есть следующие столбцы:

  • NAME

    Имя инструмента, связанное с мьютексом.

  • OBJECT_INSTANCE_BEGIN

    Адрес в памяти инструментированного мьютекса.

  • LOCKED_BY_THREAD_ID

    Когда поток в данный момент имеет заблокированный мьютекс, LOCKED_BY_THREAD_ID является THREAD_ID потока блокировки, в противном случае это NULL.

В таблице mutex_instances есть следующие индексы:

  • Первичный ключ по (OBJECT_INSTANCE_BEGIN)

  • Индекс по (NAME)

  • Индекс по (LOCKED_BY_THREAD_ID)

TRUNCATE TABLE не разрешён для таблицы mutex_instances.

Для каждого инструментированного в коде мьютекса Performance Schema предоставляет следующую информацию.

  • Таблица setup_instruments перечисляет имя точки инструментирования с префиксом wait/synch/mutex/.

  • Когда какой-либо код создаёт мьютекс, в таблицу mutex_instances добавляется строка. Столбец OBJECT_INSTANCE_BEGIN является свойством, которое однозначно идентифицирует мьютекс.

  • Когда поток пытается заблокировать мьютекс, таблица events_waits_current показывает строку для этого потока, указывающую, что он ожидает мьютекс (в столбце EVENT_NAME) и указывающую, на какой мьютекс он ожидает (в столбце OBJECT_INSTANCE_BEGIN).

  • Когда поток успешно блокирует мьютекс:

    • events_waits_current показывает, что ожидание мьютекса завершено (в столбцах TIMER_END и TIMER_WAIT)

    • Событие завершённого ожидания добавляется в таблицы events_waits_history и events_waits_history_long

    • mutex_instances показывает, что мьютекс теперь принадлежит потоку (в столбце THREAD_ID).

  • Когда поток разблокирует мьютекс, mutex_instances показывает, что мьютекс теперь не принадлежит ни одному потоку (столбец THREAD_ID имеет значение NULL).

  • Когда объект мьютекса уничтожается, соответствующая строка удаляется из mutex_instances.

С помощью запросов к обеим следующим таблицам приложение мониторинга или DBA может обнаружить узкие места или тупики между потоками, которые связаны с мьютексами:

  • events_waits_current, чтобы увидеть, на какой мьютекс ждёт поток

  • mutex_instances, чтобы увидеть, какой другой поток в данный момент владеет мьютексом

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-8.4-en/performance-schema-mutex-instances-table.html

Spec-Zone.ru

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