2015-06-11 1 views
0

Возможно ли, чтобы на сервере SQl одновременно выполнялось 3 задания (скажем, 3:00), которые обновляют одну и ту же таблицу? У обновлений есть другое предложение where. Я хотел бы знать, будут ли таблицы затухать или каждая работа будет работать независимо друг от друга. Также, когда выполняется обновление, он блокирует всю таблицу?Одновременные операции DML в одной таблице на основе разных where where

+0

add WITH NOLOCK для всех таблиц – mohan111

+4

@ mohan111 - жестокий совет, не зная какого-либо контекста. –

+0

Когда транзакции совершаются на одном столе, чтобы избежать блокировок, я просто предложил ему добавить NOLOCKS, он не будет разрешен, но нужно следовать Process @Damien_The_Unbeliever – mohan111

ответ

0

можно обновить ту же таблицу в то же время, если вы обновляете разные строки, но тупики или, по крайней мере, блокировка может произойти, по крайней мере, в следующих случаях:

  1. Вы не имеют индекс для предложения where, поэтому обновления могут блокировать друг друга, потому что нужно отсканировать весь кластерный индекс.
  2. У вас есть другие индексы, которые необходимо обновить из-за этого обновления, и по этим индексам происходят взаимоблокировки/блокировки.
  3. У вас есть другие транзакции (обновление, выбор и т. Д.), В которых есть блокировки на страницах процесса A, пытается бновить, и этот процесс ждет страниц, уже заблокированных процесс B
  4. Вы обновляя так много записей, что эскалация блокировок происходит в таблицу блокировку

Там, наверное, и другие случаи. Блокировка, конечно, самая распространенная вещь, которая может произойти, но она также может привести к взаимоблокировкам.

+0

Спасибо ... Но обновление не получает блокировку таблицы на таблица обновляется? Если да, то как другое обновление может происходить в одной и той же заблокированной таблице одновременно? Должен ли я использовать rowlock вместо блокировки по умолчанию для обновления одной и той же таблицы одновременно, чтобы избежать блокировки? – user3453057

+0

@ user3453057 Нет, SQL Server пытается сделать как можно меньше блокировки. Поиск статей с эскалацией блокировки может объяснить это подробно, но может быть довольно техническим, например https://technet.microsoft.com/en-us/library/ms184286%28v=sql.105%29.aspx –

Смежные вопросы