Возможно ли, чтобы на сервере SQl одновременно выполнялось 3 задания (скажем, 3:00), которые обновляют одну и ту же таблицу? У обновлений есть другое предложение where. Я хотел бы знать, будут ли таблицы затухать или каждая работа будет работать независимо друг от друга. Также, когда выполняется обновление, он блокирует всю таблицу?Одновременные операции DML в одной таблице на основе разных where where
ответ
можно обновить ту же таблицу в то же время, если вы обновляете разные строки, но тупики или, по крайней мере, блокировка может произойти, по крайней мере, в следующих случаях:
- Вы не имеют индекс для предложения where, поэтому обновления могут блокировать друг друга, потому что нужно отсканировать весь кластерный индекс.
- У вас есть другие индексы, которые необходимо обновить из-за этого обновления, и по этим индексам происходят взаимоблокировки/блокировки.
- У вас есть другие транзакции (обновление, выбор и т. Д.), В которых есть блокировки на страницах процесса A, пытается бновить, и этот процесс ждет страниц, уже заблокированных процесс B
- Вы обновляя так много записей, что эскалация блокировок происходит в таблицу блокировку
Там, наверное, и другие случаи. Блокировка, конечно, самая распространенная вещь, которая может произойти, но она также может привести к взаимоблокировкам.
Спасибо ... Но обновление не получает блокировку таблицы на таблица обновляется? Если да, то как другое обновление может происходить в одной и той же заблокированной таблице одновременно? Должен ли я использовать rowlock вместо блокировки по умолчанию для обновления одной и той же таблицы одновременно, чтобы избежать блокировки? – user3453057
@ user3453057 Нет, SQL Server пытается сделать как можно меньше блокировки. Поиск статей с эскалацией блокировки может объяснить это подробно, но может быть довольно техническим, например https://technet.microsoft.com/en-us/library/ms184286%28v=sql.105%29.aspx –
- 1. оракул Перед триггером на операции DML на одной таблице
- 2. Условный на основе _.where
- 3. Нужно два вычисленного поля, но на основе разных статей where
- 4. Создайте два столбца из одного, на основе другого where where
- 5. Элемент извлечения на основе where where в jq json
- 6. Обновление нескольких полей в одной таблице с другим условием WHERE
- 7. Sqlite обновить столбец на основе where where android
- 8. MySQL WHERE результат на основе предыдущего предложения WHERE
- 9. Использование предложения WHERE на объединенной таблице
- 10. Операции DML в представлениях в SQL Server
- 11. TSQL WHERE Предложение основано на таблице Temp
- 12. UPDATE с предложением where на основе подзапроса
- 13. DATEDIFF на основе ID в предложении WHERE
- 14. MySQL присоединяется к where where
- 15. LINQ Join Where Where
- 16. Необязательные параметры в where where
- 17. appending -> where() на основе условных выражений
- 18. conditional where where
- 19. SQL where предложение с несколькими ключами в одной таблице
- 20. Условия в положениях Where на основе флага
- 21. mysql load data infile where where
- 22. MySQL UPDATE WHERE х <(SELECT WHERE)
- 23. Предложение MySQL WHERE на ненормализованной таблице
- 24. Критерии - предложение where на объединенной таблице
- 25. Как сравнить значения из разных строк в одной таблице для включения в предложение WHERE другого оператора?
- 26. where where в списке linq
- 27. DEADLOCK DbContext Одновременные Операции
- 28. Zeolibs: Неизвестная колонка в Where where
- 29. Операции PLSQL DML внутри процедуры
- 30. Google fusion table where where
add WITH NOLOCK для всех таблиц – mohan111
@ mohan111 - жестокий совет, не зная какого-либо контекста. –
Когда транзакции совершаются на одном столе, чтобы избежать блокировок, я просто предложил ему добавить NOLOCKS, он не будет разрешен, но нужно следовать Process @Damien_The_Unbeliever – mohan111