Как user_tables могут быть заблокированы в Oracle? - PullRequest
3 голосов
/ 13 марта 2012

У меня есть трассировка от машины, на которой следующий запрос завис на несколько дней:

SELECT table_name FROM user_tables

Что может генерировать такую ​​блокировку? Пользователи никогда не могут изменять эту таблицу; и было много последующих запросов, которые были успешно выполнены.

1 Ответ

3 голосов
/ 13 марта 2012

Таким образом, поскольку условие больше не существует, невозможно определить, что произошло.

Однако в будущем, если это или что-то подобное произойдет снова, вы захотите использовать интерфейс ожидания Oracle.То есть посмотрите на V$SESSION.

. Сначала вы захотите определить, вращается ли процесс (т. Е. На процессоре) или блокируется (т. Е. Ожидает события ожидания).Чтобы определить это, посмотрите на столбец STATE:

  • Если STATE равен 'WAITING', то сеанс блокируется.Если это так, то в столбце EVENT должно быть указано, какое событие ожидает сеанс.
  • Если STATE отличается от 'WAITING', тогда сеанс находится на ЦП, а последний столбец EVENTвещь, которую он ждал.
    • Если STATE равен 'WAITED KNOWN TIME', то WAIT_TIME - это время ожидания в сантисекундах.
    • Если STATE равно 'WAITED SHORT TIME', то сеанс ожидал менее секунды.
    • Если STATE равен 'WAITED UNKNOWN TIME', то ожидаемое время неизвестно, поскольку для сеанса timed_statistics было установлено значение FALSE.

Надеюсь, что это поможет.

...