Как SQL Server обрабатывает одновременные запросы? - PullRequest
2 голосов
/ 29 января 2010

Если несколько запросов к одной и той же большой таблице поступают в SQL Server одновременно, как SQL Server разрешает конфликты в этом случае?

При использовании запросов LINQ to SQL в приложении WPF для установки на многих компьютерах, работающих в сети с базой данных SQL Server, должен ли я каким-то образом реализовать механизм для решения таких проблем или я защищен от подобных проблем с помощью SQL Server и LINQ для SQL

(я не имею в виду одновременные операции с одной и той же записью, которая решена с помощью поля TIMESTAMP. Я имею в виду некоторую проблему с очередью, когда одна и та же большая таблица запрашивается у нескольких сетевых станций)

Ответы [ 3 ]

3 голосов
/ 29 января 2010

SQL Server будет управлять соединениями и выполнением запросов для каждого из ваших соединений, вы не будете контролировать, как, когда, кто будет запрашивать, когда.

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

3 голосов
/ 29 января 2010

Если ваши запросы вызывают взаимоблокировку, SQL Server имеет внутренний механизм для их решения.

Если он обнаруживает тупиковую ситуацию, он выбирает транзакцию «жертвы» для отката. Способ выбора жертвы основывается сначала на настройке приоритета транзакции, а затем на общей стоимости отката каждого запроса. Тот, кто обходится дешевле, обычно является жертвой.

В действительности вы можете использовать SET DEADLOCK_PRIORITY для управления приоритетом (НИЗКИЙ, СРЕДНИЙ или ВЫСОКИЙ или число от -10 до 10). Если вы обнаружите, что находитесь в такой ситуации, вам действительно следует приложить усилия для уменьшения взаимных блокировок.

2 голосов
/ 29 января 2010

Базы данных используют уровни изоляции для решения проблем, о которых вы спрашиваете.

Уровни изоляции вступают в игру, когда вам необходимо изолировать ресурс для транзакции и защитить этот ресурс от других транзакций. Защита осуществляется путем получения замков. Какие блокировки должны быть установлены и как они должны быть установлены для транзакции, определяется SQL Server в соответствии с установленным уровнем изоляции. Более низкие уровни изоляции позволяют нескольким пользователям одновременно получать доступ к ресурсу (параллелизм), но они могут создавать проблемы, связанные с параллелизмом, такие как грязное чтение и неточность данных. Более высокие уровни изоляции устраняют проблемы, связанные с параллелизмом, и повышают точность данных, но могут привести к блокировке.

Подробнее об уровнях изоляции SQL Server 2005 читайте в этой статье .

Вы можете настроить уровни изоляции даже для каждого запроса. Но это продвинутый принцип, который действительно может вызвать проблемы.

...