2017-01-10 13 views
1

Я хочу, чтобы два пользователя одновременно выполняли одну и ту же хранимую процедуру. Если для выполнения этой хранимой процедуры требуется два запроса asp.net, они должны последовательно выполняться один за другим.Предотвращение одновременного выполнения хранимой процедуры SQL Server с ado.net в Asp.net

База данных SQL Server и ее выполнение обрабатываются ado.net.

Будет ли любой из нижеперечисленных способов помочь в достижении этого? Каков наиболее подходящий метод? Есть ли другие способы достичь того же?

  1. Выполнение хранимой процедуры с ado.net сделки, установив уровень изоляции SERIALIZABLE

  2. sp_getapplock Использовать внутри хранимой процедуры и выпуска в конце

ответ

2

Выполнение хранимой процедуры с ado.net сделки, установив уровень изоляции Serializable

Да, вы можете, вы можете использовать Сериализуемый уровень изоляции с транзакцией ado.net. Это самый высокий уровень изоляции, и он полагается на пессимистический контроль параллелизма. & гарантирует согласованность, предполагая, что две транзакции могут попытаться обновить одни и те же данные и использовать замки, чтобы убедиться, что они этого не делают. Одна транзакция должна подождать, пока другой завершит работу, и они могут заблокировать.

Использование sp_getapplock внутри хранимой процедуры и выпуска в конце

Да, вы можете использовать SQL замки серверных приложений sp_getapplock. Вам нужно будет освободить замок с sp_releaseapplock

Другой вариант - использовать Global Temporary Tables.

+0

Спасибо за ссылку @william. Я только что нашел эту строку в первом параграфе этой ссылки «Однако вам нужны разрешения для учетной записи, на которой выполняется сохраненный процесс». Означает ли это, что разрешение на выполнение SP без sp_getapplock может оказаться недостаточным для SP с sp_getapplock? –

2

Я бы рекомендовал с использованием очередей системы среднего уровня вашей архитектуры, между ASP.NET и вашей базой данных. Таким образом, запросы получаются и обрабатываются по порядку. Затем вы можете настроить систему, чтобы обрабатывать только один запрос в то время,

+0

Да, это хороший дизайн. но в моем случае мне нужно показать результат выполнения sp обратно пользователю в режиме реального времени. Спасибо –

+0

Вы больше не будете получать в реальном времени, подключившись прямо к sql - это все равно сетевое подключение, которое должно сделать скачок. –

+0

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