Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как определить ПРОГРАМНО мертвые блокировки  [new]
jamper
Guest
Хочу написать скриптик/ программу на С который переодически смотрит состояние блокировок, и если скл ушел в мертвую блокировку, то по определенному алгоритму (некоторые процессы нельзя трогать) убивает процессы

Не смог найти никакой документации на апи для мсскл под С

С уважением
jamper@apelsin.ru
3 авг 04, 10:25    [854186]     Ответить | Цитировать Сообщить модератору
 Re: Как определить ПРОГРАМНО мертвые блокировки  [new]
Glory
Member

Откуда:
Сообщений: 104760
Deadlock-и сервер разруливает сам.
А таймаут ожидания снятия простой блокировки можно задать через SET LOCK_TIMEOUT и запрограммировать нужным образом клиента на обработку возникающей в этом случае ошибки.

А информацию о блокировках можно получить с помлщью системной процедуры sp_lock
3 авг 04, 10:34    [854203]     Ответить | Цитировать Сообщить модератору
 Re: Как определить ПРОГРАМНО мертвые блокировки  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
а если случился лок потому что сработали 2 раза raiserrorы?
со стороны сервера кроме kill spid?


для спящего время бодрствования равносильно сну
3 авг 04, 10:36    [854206]     Ответить | Цитировать Сообщить модератору
 Re: Как определить ПРОГРАМНО мертвые блокировки  [new]
KOLCHOZ_POSTEVENT
Guest
Раз в восемь секунд дёргую Sql через Powerbuilder

SELECT syslocks.id ,
syslocks.dbid ,
syslocks.page ,
syslocks.type ,
syslocks.spid ,
syslocks.class
FROM syslocks
WHERE ( syslocks.type >= 254 ) and ( syslocks.dbid = 2 )

Если что-то ловится,то включается серена,вроде той,что ласкала нам слух во время иракских налётов зимой 91-го.
Если три раза подряд есть улов,автоматом посылаются команды kill попавшимся юзерам и интервал запроса переключается на 4 секунды.
Так как причины возникновения этих ситуаций известны и "под раздачу" попадают,в силу этих причин,мене приоритетные базы,то трюк проходит.
3 авг 04, 12:06    [854564]     Ответить | Цитировать Сообщить модератору
 Re: Как определить ПРОГРАМНО мертвые блокировки  [new]
KOLCHOZ_POSTEVENT
Guest
Я не совсем оттуда скатал синтакс,выкинь class из select списка

SELECT syslocks.id ,
syslocks.dbid ,
syslocks.page ,
syslocks.type ,
syslocks.spid
FROM syslocks
WHERE ( syslocks.type >= 254 ) and ( syslocks.dbid = 2 )
3 авг 04, 12:15    [854605]     Ответить | Цитировать Сообщить модератору
 Re: Как определить ПРОГРАМНО мертвые блокировки  [new]
jamper
Guest
KOLCHOZ_POSTEVENT
Я не совсем оттуда скатал синтакс,выкинь class из select списка

SELECT syslocks.id ,
syslocks.dbid ,
syslocks.page ,
syslocks.type ,
syslocks.spid
FROM syslocks
WHERE ( syslocks.type >= 254 ) and ( syslocks.dbid = 2 )


А можешь выслать полный скрипт/функцию ?
3 авг 04, 15:22    [855601]     Ответить | Цитировать Сообщить модератору
 Re: Как определить ПРОГРАМНО мертвые блокировки  [new]
KOLCHOZ_POSTEVENT
Guest
B том-то и дело,что со стороны сервера это,собтвенно,и всё.
Oстальное делает client:анализирует количество пришедших записей,если их >0,то включается счётчик,врубается серена простой досовской командой
c:\windows\ServicePackFiles\i386\wmplayer.exe d:\ATAS.mp3,которая,пуляется powerbuilder-овской функцией run,если ничего не пришло,счётчик зануляется.
А когда счётчик добирается до 3,то с client на счётчик шлются в цикле комманды execute immediate 'kill '+string(Spid);-тоже powerbuilder-овский синтакс,на C,наверняка есть аналоги.
Сплошной тривиал.
3 авг 04, 16:15    [855851]     Ответить | Цитировать Сообщить модератору
 Re: Как определить ПРОГРАМНО мертвые блокировки  [new]
KOLCHOZ_POSTEVENT
Guest
Я тут лажанулся в предыдущем пояснении,а понял это уже по дороге домой,так,что исправляюсь сейчас,с утреннего бодунка.
Проверять надо не на больше 0,ана больше 1,т.к. 1 запись,принесённая тем селектом это ещё не блокировка,а просто локировка в tempdb,а вот 2 записи в ответе на него это уже блок.
Успел забыть,блин,что сам запихал туда,2 года эта штука несёт вахту.
4 авг 04, 10:32    [857151]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить