Назад | Перейти на главную страницу

Взаимоблокировки Oracle DB

У нас есть ситуация, когда db "тормозит". Операции с БД, которые обычно занимают секунду или две, занимают в десять раз больше времени. Когда это происходит, кажется, что в базе данных имеется большое количество блокировок. Может ли большое количество взаимоблокировок создавать медленную работу БД?

Взаимоблокировки - это особая ситуация, когда транзакция A блокирует, а затем пытается заблокировать что-то, что в настоящее время заблокировано транзакцией B, и должно ждать. Затем транзакция B пытается заблокировать элемент, который в настоящее время заблокирован транзакцией A. База данных «замечает», что ситуация не может разрешиться естественным образом, поэтому одна из транзакций ошибается и вынуждает ее выполнить откат.

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

Вместо этого я предполагаю, что «что-то» изменилось. Это могут быть блокировки, но в равной степени возможно, что у вас заблокировано гораздо больше данных, потому что транзакции занимают больше времени (и, следовательно, блокировки удерживаются дольше).

Если вы используете 10g / 11g с AWR / ASH (пакет диагностики / настройки), OEM должен быть в состоянии помочь диагностировать ситуацию.

Если нет, посмотрите на V $ SESSION и посмотрите, много ли у вас сеансов с установленным BLOCKING_SESSION. Это означает, что они ждут блокировки. Вам нужно беспокоиться только о блокировках, если сеансы их ожидают, поэтому используйте это, а не количество блокировок. Если это не указывает на проблему, перейдите к v $ session_event и посмотрите, какие записи wait_class ответственны за большую часть времени.

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

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

Это особенно верно, если несколько заданий ожидают в очереди освобождения одного и того же ресурса.

Тупиковые ситуации записываются в файлы трассировки, поэтому вы можете легко определить, в чем проблема. Сначала проанализируйте обычных подозреваемых. Запрос объясняет план, индексы, статистику и прочее.