Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Помогают ли некластерные индексы с include от блокировок?  [new]
b_Yury
Member

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

Подскажите действительно некластерные индексы с включенными столбцами(чтобы покрывали запросы) могут помочь от блокировок хоть в каком-то случае?

В случае X блокировки диапазона значений ключа с таблице, в некластерном индексе(если он есть) этот диапазон тоже блокируется или нет?
24 апр 16, 14:05    [19099213]     Ответить | Цитировать Сообщить модератору
 Re: Помогают ли некластерные индексы с include от блокировок?  [new]
aleks2
Guest
1. Общее требование целостности данных означает, нельзя НИЧЕГО прочитать из изменяемого диапазона строк.

2. Индексы могут избавить от блокировок, НО за счет изменения планов исполнения запроса.
24 апр 16, 14:16    [19099242]     Ответить | Цитировать Сообщить модератору
 Re: Помогают ли некластерные индексы с include от блокировок?  [new]
iljy
Member

Откуда:
Сообщений: 8711
b_Yury,

во-первых, читайте про совместимость блокировок: читатели друг другу не мешают.
во-вторых - если вы что-то меняете (а иначе зачем вам Х-блокировка), то запись в кластерном индексе блокируется в любом случае.

Правильные селективные индексы могут уменьшить количество блокировок в первую очередь за счет уменьшения количества затронутых операцией строк.
24 апр 16, 14:18    [19099246]     Ответить | Цитировать Сообщить модератору
 Re: Помогают ли некластерные индексы с include от блокировок?  [new]
Crimean
Member

Откуда:
Сообщений: 13148
b_Yury
Якобы когда данные в таблице блокированы(по диапазону значений ключа) другой запрос может прочитать данные


снапшот? RCSI? нет, не слышали? "читатели" и "писатели" давно уже не мешают друг другу.
25 апр 16, 15:37    [19103828]     Ответить | Цитировать Сообщить модератору
 Re: Помогают ли некластерные индексы с include от блокировок?  [new]
b_Yury
Member

Откуда:
Сообщений: 19
нет ни snapshot, read commited обычный,
вообще, как я понимаю, если на таблице есть кластерный индекс, то дополнительный не кластерный содержит ссылки на страницы кластерного индекса, то есть на сами данные.

И в этом случае при блокировке range строк в таблице обращаться к дополнительному некластерному индексу для выборки бессмыслено так как он указывает на сами заблокированные данные.

А если этот дополнительный некластерный индекс содержит include, это значит что в индексе на на уровне листа содержатся уже сами данные(по видимому их копия) и в этом случае при блокировке range строк в таблице будет ли заблокирован range строк в этом некластерном индексе чтобы из него нельзя было прочитать?

Если этот range значений ключа будет заблокирован и в таблице и в некластерном индексе с include - понятно.
А если этот range значений ключа будет заблокирован в таблице, а из некластерного индекса с include можно будет все равно прочитать - хотелось бы от этом знать.

Из того что писали выше следует что при блокировке таблицы по range значений ключа - из этого интервала прочитать нельзя не из таблицы не из дополнительного некластерного индекса даже если в нем есть include.
А мне убедительно рассказывали что при блокировке таблицы(read commited) может помочь именно дополнительный некластерный индекс с include, он должен быть покрывающим, якобы из него можно прочитать данные даже когда таблица блокирована, не трогая таблицу.
27 апр 16, 20:39    [19114629]     Ответить | Цитировать Сообщить модератору
 Re: Помогают ли некластерные индексы с include от блокировок?  [new]
iljy
Member

Откуда:
Сообщений: 8711
b_Yury,

у вас в голове какая-то феерическая каша. Во-первых, на уровне read commited никаких блокировок диапазона ключа не бывает, для этого нужен serializable. Во-вторых, вы так и не раскололись, что же в вашем понимании такое "таблица заблокирована". Это какая из блокировок - IS, S, U, SIX, IX, X? Они бывают между собой совместимы, бывают несовместимы.
По поводу блокировок диапазонов. Вот есть у меня два индекса - по f1 и по f2, и в первом я блокирую диапазон f1 1 - 10. Какой по вашему диапазон должен быть заблокирован во втором индексе?
Что касается покрывающих индексов. Если я меняю поле, которое в покрывающий индекс не входит, то он не будет блокироваться и им можно пользоваться, если входит, то будет.
27 апр 16, 21:29    [19114742]     Ответить | Цитировать Сообщить модератору
 Re: Помогают ли некластерные индексы с include от блокировок?  [new]
invm
Member

Откуда: Москва
Сообщений: 9406
b_Yury
А мне убедительно рассказывали что при блокировке таблицы(read commited) может помочь именно дополнительный некластерный индекс с include, он должен быть покрывающим, якобы из него можно прочитать данные даже когда таблица блокирована, не трогая таблицу.
Да, такое возможно.
Если изменение таблицы не затронуло ни ключа кластерного индекса, ни столбцов ключа некластерного и его include-столбцов, то из этого некластерного вполне можно считывать данные - блокировки строк кластерного мешать не будут.
От уровня изоляции транзакций данное поведение не зависит.
Также следует понимать, что этот фокус удастся только при update.
27 апр 16, 21:56    [19114820]     Ответить | Цитировать Сообщить модератору
 Re: Помогают ли некластерные индексы с include от блокировок?  [new]
b_Yury
Member

Откуда:
Сообщений: 19
iljy,

мнение о моей голове при себе оставьте. от вас ничего не нужно.
28 апр 16, 20:23    [19119362]     Ответить | Цитировать Сообщить модератору
 Re: Помогают ли некластерные индексы с include от блокировок?  [new]
b_Yury
Member

Откуда:
Сообщений: 19
invm,

получается что все-таки можно читать из изменяемого диапазона строк(из неклатсерного индекса), если изменение таблицы не затронуло ни столбцов кластерного индекса, ни столбцов некластерного и его include-столбцов.и если это Update.

Верно ли я понял что в этом случае если не будет некластерного индекса будет блокировка и ожидание, а если будте некластерный индекс то из него пройдет чтение и ожидания не будет?
а include для этого обязателен в этом некластерном индексе? или достаточно чтобы в состав некластерного индекса входили все читаемые столбцы без include
28 апр 16, 21:43    [19119614]     Ответить | Цитировать Сообщить модератору
 Re: Помогают ли некластерные индексы с include от блокировок?  [new]
invm
Member

Откуда: Москва
Сообщений: 9406
b_Yury
Верно ли я понял что в этом случае если не будет некластерного индекса будет блокировка и ожидание, а если будте некластерный индекс то из него пройдет чтение и ожидания не будет?
Вы как-то туманно изъясняетесь. Если имеется в виду способ обхода несовместимой блокировки в некоторых случаях, то да.
b_Yury
а include для этого обязателен в этом некластерном индексе? или достаточно чтобы в состав некластерного индекса входили все читаемые столбцы без include
Главное - наличие столбца в индексе. Откуда считывать его значение - из ключа или из include-столбцов - не важно.
Если столбец будет использоваться для поиска по индексу - то он должен быть в ключе.

Если вы таким экстравагантным способом собираетесь решать конфликты читателей и писателей - то индексов не напасетесь на все случаи жизни.
Сами же писали, что работаете на RC. Ну так включите RCSI и не занимайтесь ерундой.
28 апр 16, 23:08    [19119808]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить