Как User_tables заблокирован на Oracle?
-
13-12-2019 - |
Вопрос
У меня есть трассировка от машины, где следующий запрос, казалось, был подвешен на дни:
SELECT table_name FROM user_tables
.
Что может генерировать такой замок?Пользователи никогда не могут изменять эту таблицу;И было много последующих экземпляров этого запроса, которое успешно побежало.
Решение
Так, поскольку состояние больше не существует, нет способа сказать, что произошло.
Однако в будущем, если это или что-то подобное происходит снова, вы захотите использовать интерфейс ждать Oracle. То есть посмотрите на V$SESSION
.
Во-первых, вы захотите определить, будет ли процесс вращаться (то есть на CPU) или блокировка (то есть ждем на событии ожидания). Способ определить, что это посмотреть на столбец STATE
:
- .
- Если состояние
'WAITING'
, то сеанс заблокирован. Если это так, то столбец событий должен описать, на каком случае сеанс ждет сеанс. - Если государство - это что-то другое, чем «ожидание», то сеанс находится на процессоре, а столбец событий - это последнее, что он ждал.
- .
- Если состояние
'WAITED KNOWN TIME'
, то wait_time - это время ждали в сетьсекунде.
- Если состояние
- Если состояние
'WAITED SHORT TIME'
, то сеанс ждал меньше, чем сентиюка. - Если состояние
'WAITED UNKNOWN TIME'
, то время ждал, не известен, потому что timed_statistics был установлен на false для сеанса.
Надеюсь, что помогает.
Не связан с StackOverflow