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

Откуда:
Сообщений: 3
Есть таблица
id int identity(1,1),
A varchar(10),
B varchar(10),
C varchar(10),
q1 decimal(20,2),
q2 decimal(20,2),
q3 decimal(20,2)

A,B,C - primary key и кластерный индекс
id - уникальный не кластерный индекс

Число записей - сотни тысяч

Было обнаружено, что простейшие операции update/insert занимают непозволительно длительное время - десятки секунд.

Поменяли индексы - id сделали кластерным индексом, а primary key - обычным.
Рассуждали так: Кластерный индекс физически сортирует записи, а добавление записи с новым PK далеко не всегда добавит эту запись в конец (даже - как правило, не в конец), аналогично и обновление может переместить запись. А id - identity - т.е. новая запись всегда последняя и при update не меняется.
Такое изменение, по идее, должно было привести к некоторому росту скорости работы с таблицей.
Реально же эффект оказался совсем противоположным - после изменения все затормозилось до степени пока один пользователь не завершит операцию, другой ничего сделать не может.
Вернули все назад - заработало нормально (т.е. по старому).
Почему так?
9 ноя 12, 10:47    [13444439]     Ответить | Цитировать Сообщить модератору
 Re: Падение производительности при изменении индексов  [new]
Jovanny
Member

Откуда:
Сообщений: 1196
При вставке пересчитываются все индексы таблицы и индексированных представлений которые ссылаются на него. А если есть внешние ключи, то и ссылочная целостность проверяется.
Нужно смотреть в комплексе.
9 ноя 12, 11:01    [13444520]     Ответить | Цитировать Сообщить модератору
 Re: Падение производительности при изменении индексов  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Еще бы код и план ваших "операций" посмотреть.
9 ноя 12, 11:40    [13444860]     Ответить | Цитировать Сообщить модератору
 Re: Падение производительности при изменении индексов  [new]
Crimean
Member

Откуда:
Сообщений: 13147
обычное добавление занимает десятки секунд??
9 ноя 12, 11:43    [13444890]     Ответить | Цитировать Сообщить модератору
 Re: Падение производительности при изменении индексов  [new]
VladCh
Member

Откуда:
Сообщений: 3
Jovanny
При вставке пересчитываются все индексы таблицы и индексированных представлений которые ссылаются на него. А если есть внешние ключи, то и ссылочная целостность проверяется.
Нужно смотреть в комплексе.

Дак.. оно в обоих случаях все пересчитывает...

Гавриленко Сергей Алексеевич
Еще бы код и план ваших "операций" посмотреть.

к сожалению, это проблематично - запросов валится очень много...

Удалось самому посмотреть/поковырять - выяснил следующее:
1. update/insert не всегда выполняются такое длительное время, а только изредка.
2. из SSMS они выполняются доли секунды.
3. аналогичная проблема происходит и с Select'ом из таблицы (простым, по 1-2м индексированным полям).
Видимо, ноги этой проблемы (из-за которой меняли индексы) растут из другой области: сильно похожее на это Разное время выполнения запросов

ушел изучать
9 ноя 12, 17:34    [13448306]     Ответить | Цитировать Сообщить модератору
 Re: Падение производительности при изменении индексов  [new]
Crimean
Member

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

а почему проблема? детальный трас (стейтменты, планы, рекомпайлы, вложенность и т.п.) с фильтром на 1 процесс на 5 минут не особо убъет систему, но даст достаточно пищи для размышлений
ну и смена кластерного индекса в интенсивно используемой табличке - всегда лотерея :)
9 ноя 12, 17:55    [13448415]     Ответить | Цитировать Сообщить модератору
 Re: Падение производительности при изменении индексов  [new]
1d0
Member

Откуда: инфа100%
Сообщений: 2521
зачем инсертить пользователям напрямую в таблицу со 100500 тыщ строк?

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

и если из SSMS выполняется за доли секунд, то проблема не в индексах
9 ноя 12, 18:05    [13448474]     Ответить | Цитировать Сообщить модератору
 Re: Падение производительности при изменении индексов  [new]
Crimean
Member

Откуда:
Сообщений: 13147
1d0
и если из SSMS выполняется за доли секунд, то проблема не в индексах


VladCh
Удалось самому посмотреть/поковырять - выяснил следующее:
1. update/insert не всегда выполняются такое длительное время, а только изредка.
2. из SSMS они выполняются доли секунды.


я так понимаю, что тормозит не собственно инсерт. а командочка "слегка поболее", но содержащая "тот самый инсерт"
а тут и блокировки могут роялить и вырождение индексов при большом потоке модификаций и т.д. и т.п.
9 ноя 12, 18:25    [13448618]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить