Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Проверка блокирована таблица или нет  [new]
RKam
Member

Откуда:
Сообщений: 18
Проверка блокирована таблица и каким пользователем

Суть, в БД есть задания учета (Navision) которые надолго блокируют (deadlock) таблицы.

Мне нужно произвести чтение с конкретной таблицы, но перед этим проверить, не заблокирована ли она и кто ее блокирует.
Стандартных SP не нашел, чтобы была информация о имени таблицы.

Можете помочь решить проблему?
Спасибо.
11 авг 13, 11:06    [14693016]     Ответить | Цитировать Сообщить модератору
 Re: Проверка блокирована таблица или нет  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31949
RKam
Мне нужно произвести чтение с конкретной таблицы, но перед этим проверить, не заблокирована ли она и кто ее блокирует.
Стандартных SP не нашел, чтобы была информация о имени таблицы.
Посмотрите sys.dm_tran_locks

Но естественно, это будет только некая вероятность, потому что блокировок на объект или его часть может быть много коротких, а не одна долгая.
11 авг 13, 11:23    [14693034]     Ответить | Цитировать Сообщить модератору
 Re: Проверка блокирована таблица или нет  [new]
RKam
Member

Откуда:
Сообщений: 18
Спасибо, попробую, как раз интересуют только долгие, иногда до 15 мин ...
11 авг 13, 11:27    [14693040]     Ответить | Цитировать Сообщить модератору
 Re: Проверка блокирована таблица или нет  [new]
Гость333
Member

Откуда:
Сообщений: 3683
RKam
надолго блокируют (deadlock)

Советую лучше ознакомиться с терминологией. Почти наверняка вы не понимаете, что такое deadlock (взаимоблокировка). Взаимоблокировки висят не дольше нескольких секунд, после чего SQL Server их обнаруживает и устраняет. По 15 минут могут висеть только "особо хитрые" взаимоблокировки, часть графа которых недоступна компоненту Database Engine.

Вас же, судя по контексту, интересуют обычные блокировки.

RKam
Мне нужно произвести чтение с конкретной таблицы, но перед этим проверить, не заблокирована ли она и кто ее блокирует.

Зачем перед чтением нужно это проверять? И что именно вы будете проверять — строковые блокировки, страничные, табличные?.. И что должно произойти, если во время проверки таблица не будет заблокирована, а через мгновение — уже будет?

RKam
Можете помочь решить проблему?

Проблема в том, что вы не озвучили вашу проблему. А только некие действия, которые, как вы думаете, помогут эту проблему решить.
12 авг 13, 08:43    [14694752]     Ответить | Цитировать Сообщить модератору
 Re: Проверка блокирована таблица или нет  [new]
RKam
Member

Откуда:
Сообщений: 18
Есть в программе Navision процедура учета документа, которая блокирует несколько таблиц (LOCKTABLE на уровне таблицы), процедура может быть долгой ввиду большого числа строк в документе, комитов нет.
Когда начинается учет одного документа, другой пользователь так же начинает учитывать свой документ, появляются дэдлоки и тут я со своим скриптом пытаюсь влезть в этиже заблокированные таблицы, я не хочу сидеть и смотреть на потуги query что то мне показать, т.к. это может быть не скоро.
В общем придумал перед запуском скрипта посмотреть не заблокирована ли таблица, если да, то повторю попытку позже.


ЗЫ
в Navision ситуация с блокировками пропорциональна числу пользователей, если под 200, то можно и час ждать... переделать на блокировку на уровне записи - слишком трудоемко, пока выход - очередь учета, но опять же есть свои минусы....
18 авг 13, 13:13    [14722952]     Ответить | Цитировать Сообщить модератору
 Re: Проверка блокирована таблица или нет  [new]
Glory
Member

Откуда:
Сообщений: 104751
RKam
Есть в программе Navision процедура учета документа, которая блокирует несколько таблиц (LOCKTABLE на уровне таблицы), процедура может быть долгой ввиду большого числа строк в документе, комитов нет.
Когда начинается учет одного документа, другой пользователь так же начинает учитывать свой документ, появляются дэдлоки и тут я со своим скриптом пытаюсь влезть в этиже заблокированные таблицы, я не хочу сидеть и смотреть на потуги query что то мне показать, т.к. это может быть не скоро.
В общем придумал перед запуском скрипта посмотреть не заблокирована ли таблица, если да, то повторю попытку позже.


SET LOCK_TIMEOUT timeout_period
Specifies the number of milliseconds a statement waits for a lock to be released.

timeout_period
Is the number of milliseconds that will pass before Microsoft SQL Server returns a locking error. A value of -1 (default) indicates no time-out period (that is, wait forever).

When a wait for a lock exceeds the time-out value, an error is returned. A value of 0 means to not wait at all and return a message as soon as a lock is encountered.
19 авг 13, 10:42    [14724276]     Ответить | Цитировать Сообщить модератору
 Re: Проверка блокирована таблица или нет  [new]
Гость333
Member

Откуда:
Сообщений: 3683
RKam
Мне нужно произвести чтение с конкретной таблицы

NOLOCK или RCSI не помогут?
19 авг 13, 12:11    [14724787]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить