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

Откуда:
Сообщений: 6241
Вопрос вроде как не сложный, вроде даж знаю как решить, но все таки лучше спросить чтоб лисапед не изобретать:)

Есть два вида коннекта к БД, назовем первый "юзерский", второй "продвинутый".
предположим будет у меня специальная функция что бы в БД понять кто есть кто.
скажем так "юзерские" конектятся к БД, и выполняют некую процедуру dbo.MegaDoIt, когда им захочется одновременно, не мешая друг другу(грязное чтение).
Но вот как тока появляется в БД этот "продвинутый" коннект, и он тоже пытается выполнить dbo.MegaDoIt, он должен обождать что бы все "юзерские" коннекты которые уже исполняют эту процедуру, закончили с ней работать, а новые бы выстроились в очередь за "продвинутым".
если появится еще один "продвинутый", он тож в очередь.
Как продвинутый отработает, юзерские опять начнут работать в привычном для них режиме.
dbo.MegaDoIt это моя процедура, модифицировать можна полюбому, важно что туды добавить?
Вот собственно и Вопрос, просьба не спрашивать а зачем мне это надо:)
9 сен 09, 00:30    [7634577]     Ответить | Цитировать Сообщить модератору
 Re: Сериализация выполнения процедуры  [new]
i2akai1
Member

Откуда: Петербург
Сообщений: 217
demian111,

и все таки самое интересное - это зачем вам это понадобилось? заинтриговали :)
9 сен 09, 01:43    [7634706]     Ответить | Цитировать Сообщить модератору
 Re: Сериализация выполнения процедуры  [new]
i2akai1
Member

Откуда: Петербург
Сообщений: 217
demian111,

а по теме на первый взгляд можно сделать табличку куда в начале процедуры пишется инфа
о коннекте в порядке вызовов процедуры
затем если коннект не привилегированный то ждать пока в очереди перед текущим коннектом
не останутся только непривилегированные при помощи wait пару секунд
если привилегированный то ждать пока очередь перед ним не опустеет
затем тело процедуры
затем удаление записи о себе из таблички
9 сен 09, 01:54    [7634713]     Ответить | Цитировать Сообщить модератору
 Re: Сериализация выполнения процедуры  [new]
Denis Reznik
Member

Откуда: Киев
Сообщений: 156
Можно попробовать поиграться с Service Broker. Например, вы создаёте очередь, при поступлении сообщения в которую вызывается ваша хранимка. Ставите количество запускаемых экземплров хранимой процедуры, такое как вам нужно. Затем, перед постановкой следующего сообщения в очередь проверяете под каким конекшном это происходит, и если это "продвинутый" коннект, то ставите максимальное количество запускаемых экземпляров хранимой процедуры равным 1. После того как процедура отработает под "продвинутым" конекшном, возвращаете начальные настройки очереди.
9 сен 09, 02:34    [7634734]     Ответить | Цитировать Сообщить модератору
 Re: Сериализация выполнения процедуры  [new]
Нектотам
Guest
demian111,

Может sp_getapplock поможет? "Обычные" делают shared блокировку, "привелегированный" - exclusive.
9 сен 09, 06:06    [7634833]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить