У меня есть приложение, которое соединяется с базой данных SQL Server и циклически проходит через партии записей для выполнения различных задач, а затем соответствующим образом обновляет базу данных (т. Е. «Успех», «ошибка» и т. Д.).Блокировка SQL Server
Потенциальная проблема, с которой я сталкиваюсь, заключается в том, что для прохождения каждой записи (длинная история) требуется примерно одна минута или около того, если у меня есть более одного пользователя, запускающего приложение, существует высокая вероятность «столкновений данных» "или пользователи, пытающиеся обрабатывать одни и те же записи одновременно. Что не может произойти, если оно выполнено правильно.
Первоначально я подумал о добавлении столбца LOCKED
, чтобы помочь приложению определить, была ли запись уже открыта другим пользователем, однако если приложение должно было произойти сбой или выйти из него, не завершив запись, в данный момент он был включен, будет показывать эту запись как открытую другим пользователем бесконечно ... не так ли? Или я пропустил здесь легкое решение?
В любом случае, было бы идеально, если бы было возможно иметь приложение SELECT
100 записей за раз и «блокировать их» в базе данных, пока приложение обрабатывает их И так, чтобы другие пользователи могли запускать приложение и SELECT
другой набор из 100, чтобы не перекрываться. Это возможно? Я попытался провести некоторое исследование по этому вопросу, но, честно говоря, мой опыт работы в SQL Server очень ограничен. Спасибо за любую помощь!
Если столбец LOCKED достаточно для решения проблемы, и единственная проблема - это потенциальные сбои, просто добавьте задание разблокировки мастера, которое будет запущено посреди ночи. – SunKnight0
http://blog.sqlauthority.com/2012/11/15/sql-server-concurrency-basics-guest-post-by-vinod-kumar/ –
http://stackoverflow.com/questions/1138026/sql- server-performance-with-many-concurrent-long-running-queries –