Можно ли в DB2 или в любой базе данных определить, заблокирована ли таблица или нет? - PullRequest
0 голосов
/ 06 октября 2009

Возможно ли в DB2 определить, заблокирована ли таблица или нет. На самом деле, всякий раз, когда мы используем оператор Select и если эта таблица заблокирована [возможно, из-за продолжающегося выполнения вставки или удаления], мы должны ждать, пока таблица не будет разблокирована.

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

Не только в DB2, но это можно обнаружить в любой базе данных.

Ответы [ 2 ]

2 голосов
/ 06 октября 2009

Я никогда не использовал DB2, но согласно документации кажется, что вы можете использовать следующее, чтобы запросы не ожидали блокировки:

SET CURRENT LOCK TIMEOUT NOT WAIT

В качестве альтернативы, вы можете установить значение тайм-аута блокировки на 0

SET CURRENT LOCK TIMEOUT 0

Оба утверждения имеют одинаковый эффект.

Получив это, вы можете попробовать выбрать из таблицы и поймать ошибку.

1 голос
/ 07 октября 2009

Я бы порекомендовал против НЕТ ОЖИДАНИЯ, а точнее, указать низкое время блокировки (10-30 с). Если целевая таблица заблокирована только временно (небольшое обновление, скажем, в течение 1 секунды), ваше второе приложение немедленно отключится. Если у вас есть тайм-аут 10 с, второе приложение будет просто ждать, пока первое приложение не выполнит COMMIT или ROLLBACK (1 с), а затем двинется вперед.

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

Если у вас постоянно возникают проблемы с параллелизмом, рассмотрите возможность мониторинга блокировки, чтобы получить представление о том, как осуществляется доступ к базе данных. Существует множество полезных статистических данных (таких как среднее время ожидания блокировки и т. Д.), Которые могут помочь вам настроить параметры и поведение приложения.

Информационный центр DB2 V9.7 - Мониторинг баз данных

...