У меня есть проблема, когда кажется, что при запуске одной и той же хранимой процедуры в одно и то же время из двух разных экземпляров одного и того же приложения время ожидания истекает, и я спрашиваю себя, могу ли я что-нибудь сделать для ее решения?
Я полагаю, что проблема в том, как SQL Server 2008 обрабатывает сам себя, блокируя строки и выполняя SPs ... вещи, о которых я на самом деле мало что знаю.Приложение использует ADODB.Command
для запуска SP.
У меня есть один VB6 exe (App.exe
), работающий на одном сервере несколько раз.Это приложение вызывает сохраненный процесс в базе данных, который возвращает следующий порядковый номер для этого приложения.Это поле порядкового номера уникально для экземпляра приложения - в таблице по 1 строке (tbl_SequenceNos
) для каждого экземпляра работающего приложения.
Так, например, скажем, у нас работает: App[a].exe
и App[b].exe
tblSequenceNos
выглядит следующим образом:
iAppNo| iNextSequenceNo
a | 1234
b | 4567
Хранимая процедура для получения следующего порядкового номера относительно проста:
CREATE PROEDURE GetNextSequenceNo (@AppNo varchar(1), @NextSequenceNo int output)
AS
BEGIN
DECLARE @TempSequenceNo int
SELECT @NextSequenceNo = iNextSequenceNo
FROM tblSequenceNos
WHERE iAppNo = @AppNo
@NextSequenceNo = @NextSequenceNo + 1
UPDATE tblSequenceNos
SET iNextSequenceNo = @NextSequenceNo
WHERE iAppNo = @AppNo
END
Когда обаApp[a].exe
и App[b].exe
попробуйте запустить эту процедуру, чтобы получить их значение NextSequenceNo
, они зависают примерно на 30 секунд (время ожидания ADO?).
Поскольку каждое приложение никогда не просматривает строки друг друга, ядумал, что это будет работать одновременно без указания специальной блокировки.Есть ли что-то, что мне не хватает?Я подумал, что, возможно, мне нужно указать блокировку только строки, а не всей таблицы или страницы?- Я не знаю, что sql2008 делает по умолчанию.
Любая помощь очень ценится!Заранее спасибо Андрей