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_longmutex_instancesпоказывает, что мьютекс теперь принадлежит потоку (в столбцеTHREAD_ID).
Когда поток разблокирует мьютекс,
mutex_instancesпоказывает, что мьютекс теперь не принадлежит ни одному потоку (столбецTHREAD_IDимеет значениеNULL).Когда объект мьютекса уничтожается, соответствующая строка удаляется из
mutex_instances.
С помощью запросов к обеим следующим таблицам приложение мониторинга или DBA может обнаружить узкие места или тупики между потоками, которые связаны с мьютексами:
events_waits_current, чтобы увидеть, на какой мьютекс ждёт потокmutex_instances, чтобы увидеть, какой другой поток в данный момент владеет мьютексом
© 2025 Oracle
Licensed under the GPLv2 License.