Re: Ms Sql 2017. Deadlock после добавления индекса
От: Tom Россия http://www.RSDN.ru
Дата: 02.01.23 18:48
Оценка:
Здравствуйте, BlackEric, Вы писали:

BE>На таблицу, 25 млн записей, самая нагруженная в проекте чтение, обновление, добавление добавили индекс (не уникальный, не кластеризованный).

BE>Таблица имеет кластеризованный первичный ключ по полю ID (uniqueidentifier). И множество других индексов и внешних ключей.

BE>Почему собственно после добавления еще одного индекса посыпались дедлоки?


BE>Я это вижу так:


BE>Таблица имеет кластеризованный индекс и новый некластеризованный индекс, который включает столбец Column.

BE>Один коннект нашел строку для обновления с помощью кластеризованного индекса и обновил страницу данных. Теперь он хочет обновить индексную страницу с новым значением Column.

BE>Другой коннект нашел ту же строку в некластеризованном индексе и установил блокировку обновления для этой строки в индексе. Блокировка обновления — это блокировка чтения, которая может удерживаться только одним коннектом. Эта блокировка обновления блокирует первый коннект. Второй теперь хочет получить блокировку обновления также на странице данных, но заблокирован первым процессом.


BE>Но как понять, тогда какой индекс вызовет дедлоки, а какой нет?

BE>Честно говоря впервые ловлю дедлок после добавления индекса.

https://www.mssqltips.com/sqlservertip/6368/sql-server-readcommittedsnapshot-database-option-and-read-commited-transaction-isolation-level/
и забудете о дедлокаъ
Народная мудрось
всем все никому ничего(с).
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.