|
сервер не желает использовать фильтрованный индекс
|
|||
---|---|---|---|
#18+
имеется здоровенная таблица с вот таким индексом: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
в принципе он подходит, но он тоже большой, хоть и компресснутый. а EF долбит сервер вот таким вот шедевром: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
создаю ему вот такой индекс: Код: sql 1. 2. 3. 4.
он крошечный, но сервер его не берет. прописываю его хинтом, он тогда использует, но лезет в ПК за IdVeicolo. что вообще-то против всякой логики: если он не верит, что [IdVeicolo] IS NULL, то не должен пользоваться этим индексом вообще, должен кричать, что план из-за хинта создать не может. а раз может, то чего лезет в ПК? но черт с ним, я ему добавляю IdVeicolo в инклуд. не, не берет все равно. хинтом прописываю, в ПК уже не лезет, запрос выполняется быстрее, чем если брать нефильтрованный индекс, но ведь не берет и все, да еще и несусветную стоимость птиписывает хинтованному запросу. вопрос: почему? прилагаю планы актуальные. первый с указанным фильтрованным индексом, второй с переделанным индексом, вот таким: Код: sql 1. 2. 3. 4.
plan1 plan2 ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2020, 17:19 |
|
сервер не желает использовать фильтрованный индекс
|
|||
---|---|---|---|
#18+
Не вникал в планы, но, по всей видимости, проблема тут Код: sql 1.
Добавьте это поле в inclued секцию. Без этого фильтрованный индекс на is null не работает. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2020, 17:24 |
|
сервер не желает использовать фильтрованный индекс
|
|||
---|---|---|---|
#18+
msLex Не вникал в планы, но, по всей видимости, проблема тут Код: sql 1.
Добавьте это поле в inclued секцию. Без этого фильтрованный индекс на is null не работает. Опс, это вы уже сделали, но без хинта индекс не используется Тогда нужно смотреть планы. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2020, 17:27 |
|
сервер не желает использовать фильтрованный индекс
|
|||
---|---|---|---|
#18+
так вот, второй план показывает, как он не желает брать переделанный индекс, в который как раз и добавлено IdVeicolo: Код: sql 1. 2. 3. 4.
не берет, и стоимость ему насчитывает офигенную ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2020, 17:29 |
|
сервер не желает использовать фильтрованный индекс
|
|||
---|---|---|---|
#18+
мб Код: sql 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2020, 17:29 |
|
сервер не желает использовать фильтрованный индекс
|
|||
---|---|---|---|
#18+
msLex Тогда нужно смотреть планы. планы не лезут без архивации, у меня ссылки на брентозаровскую вставлялку планов ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2020, 17:30 |
|
сервер не желает использовать фильтрованный индекс
|
|||
---|---|---|---|
#18+
istrebitel мб Код: sql 1. 2. 3. 4.
и этот тоже не берет, хотя уже считает, что стоимость 50х50 plan3 ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2020, 17:35 |
|
сервер не желает использовать фильтрованный индекс
|
|||
---|---|---|---|
#18+
А что за [FLEETXS].[dbo].[Transazioni].[ix_fltr_datainserimento]? Он почему-то попал в unmatched indexes ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2020, 17:41 |
|
сервер не желает использовать фильтрованный индекс
|
|||
---|---|---|---|
#18+
msLex А что за [FLEETXS].[dbo].[Transazioni].[ix_fltr_datainserimento]? Он почему-то попал в unmatched indexes ну есть такой, да, только совсем не под этот запрос: Код: sql 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2020, 17:43 |
|
сервер не желает использовать фильтрованный индекс
|
|||
---|---|---|---|
#18+
и да, надо в него тоже в инклуд IdDispositivo воткнуть, его он тоже не брал добровольно и он у меня хинтом прописан. там все же sp, а не сгенеренный бред от EF ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2020, 17:46 |
|
сервер не желает использовать фильтрованный индекс
|
|||
---|---|---|---|
#18+
Yasha123, покажите определение кластерного индекса еще и желательно гистограмму колонок Id и IdCliente вообще там же еще переменная он может с вектор плотности вместо гистограммы использовать. можете как то к запросу вкорячить option (recompile) или optimize for (@p__linq__0 = const) ? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2020, 17:57 |
|
сервер не желает использовать фильтрованный индекс
|
|||
---|---|---|---|
#18+
Совсем не понятно, что за дичь происходит перед index seek в первом запросе второго плана. Ведь выбираемый индекс просто идеально подходит под запрос, и должен быт 1 index seek (что и ожидает сервер), а по факту происходит 2(!). Может где с типами параметров и полей несоответствие? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2020, 18:03 |
|
сервер не желает использовать фильтрованный индекс
|
|||
---|---|---|---|
#18+
msLex Совсем не понятно, что за дичь происходит перед index seek в первом запросе второго плана. Ведь выбираемый индекс просто идеально подходит под запрос, и должен быт 1 index seek (что и ожидает сервер), а по факту происходит 2(!). Может где с типами параметров и полей несоответствие? Так, стало понятней Он вот эту портянку в NOT( ... in) пытается преобразовать в интервалы, а их использовать для более точного index seek по всем 4-м полям индекса. а вот этот тот первый индекс конкретно по этот запрос сделан? можно ли для эксперимента убрать из ключа (перенеся в include) последнее поле? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2020, 18:15 |
|
сервер не желает использовать фильтрованный индекс
|
|||
---|---|---|---|
#18+
Yasha123, еще интересно проверить что будет если ему побольше время дать на подсчет плана, сколько он будет подбирать что бы ушло StatementOptmEarlyAbortReason="GoodEnoughPlanFound" если можете проэкспериментировать с каким нибудь тестом (querytraceon 8780 querytraceon 8671) ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2020, 18:28 |
|
сервер не желает использовать фильтрованный индекс
|
|||
---|---|---|---|
#18+
msLex а вот этот тот первый индекс конкретно по этот запрос сделан? можно ли для эксперимента убрать из ключа (перенеся в include) последнее поле? первый индекс не только под этот запрос, там еще StatusFatturazione, помониторю еще в день Fatturazione, это будет 8-ого числа, а так у меня руки чешутся дропнуть первый индекс, на данный момент его только этот запрос использует. хотим перенести Tipo в инклуд? сейчас сделаю на копии базы. кстати, если наоборот во втором индексе занести Tipo в ключ, то все равно не берет, хотя и насчитывает ему меньшую стоимость (52 x 48) plan4 ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2020, 18:29 |
|
сервер не желает использовать фильтрованный индекс
|
|||
---|---|---|---|
#18+
felix_ff Yasha123, покажите определение кластерного индекса еще и желательно гистограмму колонок Id и IdCliente вообще там же еще переменная он может с вектор плотности вместо гистограммы использовать. можете как то к запросу вкорячить option (recompile) или optimize for (@p__linq__0 = const) ? кластеред там тупее некуда, Код: sql 1. 2. 3. 4.
(id int identity) вкорячить туда recompile не выйдет, это генерит EF, но если это в студии вкорячить, результат не меняется, уже проверено ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2020, 18:36 |
|
сервер не желает использовать фильтрованный индекс
|
|||
---|---|---|---|
#18+
Yasha123 хотим перенести Tipo в инклуд? сейчас сделаю на копии базы. Да, это должно отбить охоту от построения этих ненужных интервалов. В этом случае скорость работы с первым индексом должна сравнятся со вторым (это при прочих равных типа FG, кеширование и т.п.) Yasha123 кстати, если наоборот во втором индексе занести Tipo в ключ, Это приводит к такому-же плану, что и в исходном варианте, т.е. скорость выполнения должна упасть. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2020, 18:38 |
|
сервер не желает использовать фильтрованный индекс
|
|||
---|---|---|---|
#18+
Первоначально seek predicates для запроса с обычным индексом гораздо точнее, чем для запроса с фильтрованным. Как раз за счет tipo в ключе индекса и применения "ненужного" merge interval. Это видно по значениям Estimated Number of Rows to be Read в планах. Отсюда и бОльшая стоимость запроса с фильтрованным. Поэтому показано добавление IdDispositivo и tipo в ключ фильтрованного. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2020, 18:48 |
|
сервер не желает использовать фильтрованный индекс
|
|||
---|---|---|---|
#18+
вот план при индексах: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
plan5 ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2020, 18:49 |
|
сервер не желает использовать фильтрованный индекс
|
|||
---|---|---|---|
#18+
invm Поэтому показано добавление IdDispositivo и tipo в ключ фильтрованного. IdDispositivo в ключе полностью нивелируется IdDispositivo = 0 в условиях фильтрованного индекса а интервалы фильтрации по tipo для условия Код: sql 1.
выглядят просто сюром. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2020, 18:56 |
|
сервер не желает использовать фильтрованный индекс
|
|||
---|---|---|---|
#18+
felix_ff Yasha123, еще интересно проверить что будет если ему побольше время дать на подсчет плана, сколько он будет подбирать что бы ушло StatementOptmEarlyAbortReason="GoodEnoughPlanFound" если можете проэкспериментировать с каким нибудь тестом (querytraceon 8780 querytraceon 8671) мне кажется, времени ему хватает, но вот план с флагами: plan6 ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2020, 19:01 |
|
сервер не желает использовать фильтрованный индекс
|
|||
---|---|---|---|
#18+
граждане, у меня уже крыша едет, объясните мне, зачем это EF приводит значения к типу bigint, когда в таблице поле Tipo это int? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2020, 19:09 |
|
сервер не желает использовать фильтрованный индекс
|
|||
---|---|---|---|
#18+
msLex а интервалы фильтрации по tipo для условия Код: sql 1.
выглядят просто сюром. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2020, 19:10 |
|
сервер не желает использовать фильтрованный индекс
|
|||
---|---|---|---|
#18+
Yasha123 а у вас для модели EF структура ссылающаяся на таблицу не определена случаем как long? а интервалы фильтрации по tipo для условия AND ( NOT ( CAST( [Extent1].[Tipo] AS bigint) IN (cast(7 as bigint), cast(15 as bigint), cast(16 as bigint), cast(17 as bigint), cast(18 as bigint), cast(19 as bigint)))) выглядят просто сюром. там же предикат на неравеноство, он для этого отрезки и составляет ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2020, 19:17 |
|
сервер не желает использовать фильтрованный индекс
|
|||
---|---|---|---|
#18+
felix_ff а у вас для модели EF структура ссылающаяся на таблицу не определена случаем как long? да кто их знает. я не трогаю их код, а им сказано не трогать серверный. попробую спросить, но уже в понедельник. думаю, никто даже не пошевелится. что работает, к тому не прикасаются --- а скажите, плиз, в их терминах, как надо переопределить? попробую начальство загрузить, сразу нужный тип указав ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2020, 19:29 |
|
|
start [/forum/topic.php?fid=46&msg=40011343&tid=1685501]: |
0ms |
get settings: |
9ms |
get forum list: |
10ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
100ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
58ms |
get tp. blocked users: |
1ms |
others: | 350ms |
total: | 547ms |
0 / 0 |