Spec-Zone .ru
спецификации, руководства, описания, API
|
mutex_instances
таблица приводит все взаимные исключения, замеченные Схемой
Производительности, в то время как сервер выполняется. Взаимное исключение является механизмом синхронизации,
используемым в коде, чтобы осуществить тот только один поток, в установленный срок может иметь доступ к
некоторому общему ресурсу. Ресурс, как говорят, "защищается" взаимным исключением.
Когда два потока, выполняющиеся в сервере (например, два сеанса пользователя, выполняя запрос одновременно), действительно должны будут получить доступ к тому же самому ресурсу (файл, буфер, или некоторая часть данных), эти два потока конкурируют друг против друга, так, чтобы первый запрос, который получит блокировку на взаимном исключении, заставил другой запрос ожидать, пока первое не будет сделано и разблокировало взаимное исключение.
Работа, выполняемая, содержа взаимное исключение, как говорят, находится в "критическом разделе," и многократные запросы действительно выполняют этот критический раздел сериализированным способом (по одному), который является потенциальным узким местом.
mutex_instances
у таблицы есть эти столбцы:
NAME
Инструментальное имя связалось со взаимным исключением.
OBJECT_INSTANCE_BEGIN
Адрес в памяти взаимного исключения, которое было инструментовано.
LOCKED_BY_THREAD_ID
Когда потоку в настоящий момент заблокировали взаимное исключение, LOCKED_BY_THREAD_ID
THREAD_ID
из потока блокировки иначе это NULL
.
Для каждого взаимного исключения, инструментованного в коде, Схема Производительности предоставляет следующую информацию.
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
, видеть, который другому потоку в настоящий момент
принадлежит взаимное исключение