Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Разный план выполнения
|
|||
|---|---|---|---|
|
#18+
Коллеги, подскажите, куда копать и из-за чего может быть такая ситуация: Есть простой запрос (исходный был конечно более сложный, но суть его такая же) Select * from dbo.[Новый транзит] where [Из города]='Москва' or [В город]='Москва' Выполняется приемлемо быстро. Исходная таблица с большим количеством накладных. Индексы построены. Если меняем 'Москва' на 'Екатеринбург' запрос отрабатывает в РАЗЫ медленнее! Планы выполнения при этом разные. Как такое может быть? И что с этим делать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2019, 12:20 |
|
||
|
Разный план выполнения
|
|||
|---|---|---|---|
|
#18+
Только что обнаружил, что на производительность влияет условие [В город] = 'Москва' - работает быстро [В город] = 'Екатеринбург' - работает медленно Индекс по полю "В город" пересоздавал и реорганизовывал - ничего не поменялось ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2019, 12:37 |
|
||
|
Разный план выполнения
|
|||
|---|---|---|---|
|
#18+
Статистику обновите (желательно с full scan) по индексам [Из города] и [в город] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2019, 12:37 |
|
||
|
Разный план выполнения
|
|||
|---|---|---|---|
|
#18+
К сожалению никак не помогло... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2019, 13:16 |
|
||
|
Разный план выполнения
|
|||
|---|---|---|---|
|
#18+
Соколов Валерий, OPTION (RECOMPILE) :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2019, 13:23 |
|
||
|
Разный план выполнения
|
|||
|---|---|---|---|
|
#18+
TaPaKOPTION (RECOMPILE)С литеральными параметрами? Соколов ВалерийК сожалению никак не помогло...Планы показывайте. Актуальные, в формате sqlplan. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2019, 13:44 |
|
||
|
Разный план выполнения
|
|||
|---|---|---|---|
|
#18+
Соколов Валерий, опрометчивое решение тестировать производительность на select * вам действительно нужны все столбцы из таблицы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2019, 13:56 |
|
||
|
Разный план выполнения
|
|||
|---|---|---|---|
|
#18+
felix_ffСоколов Валерий, опрометчивое решение тестировать производительность на select * вам действительно нужны все столбцы из таблицы?+1 Еще избавьтесь от OR. Сервер плохо его понимает. Замените на два запроса соединенных через UNION или UNION ALL, в зависимости от данных и бизнес логики. UNION ALL быстрее, но нужно убедиться что [Из города] никогда не равно [В город], ну или тупо исключить фильтром в одном из запросов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2019, 22:47 |
|
||
|
Разный план выполнения
|
|||
|---|---|---|---|
|
#18+
Попытаюсь всем ответить как могу :) 1. Статистику таблицы по столбцам [Из города], [В город] обновлял - результаты те же, индексы перестраивал 2. OPTION (RECOMPILE) в SELECTе применял - никаких изменений 3. Я производительность не тестирую. Выбираю все столбцы просто что бы упростить запрос для понимания. 4. Сам запрос такой: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. На всякий случай сообщаю: Когда делаю выборку по "Москве" - возвращаемых записей порядка 400 000, по "Екатеринбургу" - всего 1 900 штук В запросе делаю TOP 2000 Прикладываю планы выполнения. Упростив запросы увидел что планы по структуре одинаковые, но смутило то что, операция "Просмотр строк таблицы [Новый транзит]" гораздо больше по стоимости когда выборка идет по Екатеринбургу. При этом показатель "Фактическое количество строк" примерно 700 000, по Москве - около 8 000. Что это значит - не понимаю! Как только меняю "В город" на Москву - все начинает летать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2019, 23:51 |
|
||
|
Разный план выполнения
|
|||
|---|---|---|---|
|
#18+
Соколов Валерий, проверьте количество чтений для обоих запросов. А пока что - задача: Представьте себе склад (это файл БД), а в нём ящики (это страницы), и в каждом ящике по сто фруктов (это строки). Фрукты в ящиках могут быть красные (Москва) или жёлтые (не Москва), причём в среднем в каждом ящике девяносто красных и десять жёлтых. Логично предположить, что чтобы достать сто красных фруктов, со склада достаточно принести примерно два ящика. Сколько ящиков нужно принести, чтобы достать сто жёлтых фруктов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2019, 00:44 |
|
||
|
Разный план выполнения
|
|||
|---|---|---|---|
|
#18+
Соколов Валерий, еще раз: вам реально нужны все столбцы из ваших таблиц? дело в том что к примеру Код: sql 1. будет сильно отличаться по плану от Код: sql 1. селект с звездочкой выбирает все колонки таблицы, мало вероятно что у вас везде в предикате все выводится на поиск по кластеризованным индексам. в таком случае вы не оставляете оптимизатору большого выбора поскольку rid/key-lookup дорогостоящие операции, основная оценка будет происходить из кардинальности по предикату. для достаточно большого объема оптимизатор выберет сканирование таблицы один раз что собственно и видно у вас по предикату где город "москва" но вот для относительно малого объема будет выбираться поиск + rid/key lookup что может дать достаточно существенную деградацию. установите Код: sql 1. и сравните логические чтения когда идет сканирование таблицы и когда идет запрос по seek+lookup второй вариант выгоден на относительно малых объемах строк ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2019, 02:11 |
|
||
|
Разный план выполнения
|
|||
|---|---|---|---|
|
#18+
Расскажите уже кто-нибудь ТС про forceseek. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2019, 02:23 |
|
||
|
Разный план выполнения
|
|||
|---|---|---|---|
|
#18+
Гавриленко Сергей Алексеевич, так у него с сиками как раз и тормозит на сколько я понял из постов выше ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2019, 02:24 |
|
||
|
Разный план выполнения
|
|||
|---|---|---|---|
|
#18+
felix_ff, Тогда рассказывать надо про forcescan, и про то, что не надо пудрить приличной публике мозги. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2019, 02:30 |
|
||
|
Разный план выполнения
|
|||
|---|---|---|---|
|
#18+
Гавриленко Сергей Алексеевичfelix_ff, Тогда рассказывать надо про forcescan, и про то, что не надо пудрить приличной публике мозги. это конечно да, но если ему реально потом понадобится 2-3 колонки из всего зверинца план со сканом в итоге проиграет. я все к тому что имхо достаточно странно пытаться искать оптимальный план пока нет действительного конечного запроса ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2019, 02:40 |
|
||
|
Разный план выполнения
|
|||
|---|---|---|---|
|
#18+
Соколов ВалерийПрикладываю планы выполнения.Видимо не туда приложили. MindЗамените на два запроса соединенных через UNION или UNION ALLТам и так union all посредством index intersection. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2019, 10:28 |
|
||
|
Разный план выполнения
|
|||
|---|---|---|---|
|
#18+
Соколов ВалерийПланы План одинаковые. Для Москвы перед фильтром (1000) выбирается 1547 записей размером 13Мб. Для Свердловска перед фильтром (1000) выбирается 310 тыс записей размером 1.5Г. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2019, 14:39 |
|
||
|
Разный план выполнения
|
|||
|---|---|---|---|
|
#18+
PaulWist, Понимаю - это "задача" от Gerros... Но не понимаю как с этим бороться? Уж простите начинающего... :) разъясните плиз! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2019, 20:59 |
|
||
|
Разный план выполнения
|
|||
|---|---|---|---|
|
#18+
Соколов Валерий, [новый транзит].[№ записи] - это первичный ключ? по нему индекс есть? кластерный не хотите сделать? [новый транзит].[код плательщика] - индекс есть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2019, 23:19 |
|
||
|
Разный план выполнения
|
|||
|---|---|---|---|
|
#18+
Соколов ВалерийНо не понимаю как с этим бороться? Уж простите начинающего... :) разъясните плиз! Экстенсивно или интенсивно можно бороться. Более мощный сервер или оптимизация и уменьшение выборки (если это вообще возможно). Другими словами - вам надо, что бы ваши физические ресурсы соответствовали вашим запросам, при условии качественной оптимизации запросов конечно же. Для начала можно посмотреть, а надо ли вам действительно все 310 тыс записей размером 1.5Г выбирать по регулярному запросу, или можно эти записи как то пре-агрегировать например. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2019, 06:46 |
|
||
|
Разный план выполнения
|
|||
|---|---|---|---|
|
#18+
PizzaPizzaСоколов ВалерийНо не понимаю как с этим бороться? Уж простите начинающего... :) разъясните плиз! Для начала можно посмотреть, а надо ли вам действительно все 310 тыс записей размером 1.5Г выбирать по регулярному запросу, или можно эти записи как то пре-агрегировать например. Так а мне и не надо 310 000 - При выборке по Екатеринбургу их там столько и нет! Там всего 2 000 записей! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2019, 14:54 |
|
||
|
Разный план выполнения
|
|||
|---|---|---|---|
|
#18+
GerrosСоколов Валерий, [новый транзит].[№ записи] - это первичный ключ? по нему индекс есть? кластерный не хотите сделать? [новый транзит].[код плательщика] - индекс есть? [№ записи] - да. первичный ключ. Был некластеризованный, пересоздал. Изменений нет. [код плательщика] - да. индекс есть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2019, 15:22 |
|
||
|
Разный план выполнения
|
|||
|---|---|---|---|
|
#18+
PaulWistСоколов ВалерийПланы План одинаковые. Для Москвы перед фильтром (1000) выбирается 1547 записей размером 13Мб. Для Свердловска перед фильтром (1000) выбирается 310 тыс записей размером 1.5Г. Вот мне непонятно что есть "выбирается"? Там всего записей по "Свердловску" около 2 000! Они все подряд выгребаются? беtз учета условия "[В город]=Екатеринбург" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2019, 15:24 |
|
||
|
Разный план выполнения
|
|||
|---|---|---|---|
|
#18+
Соколов ВалерийPaulWistпропущено... План одинаковые. Для Москвы перед фильтром (1000) выбирается 1547 записей размером 13Мб. Для Свердловска перед фильтром (1000) выбирается 310 тыс записей размером 1.5Г. Вот мне непонятно что есть "выбирается"? Там всего записей по "Свердловску" около 2 000! Они все подряд выгребаются? без учета условия "[В город]=Екатеринбург"Что бы найти N записей, которые удовлетворяют условиям, может понадобиться прочитать больше N записей (и, как правило, так и происходит). Вы же рассказываете про операцию "Просмотр строк таблицы [Новый транзит]" ? Вы же не думаете, что все 2000 записей, удовлетворяющих всем условиям запроса, находятся в начале таблицы? А там уж как повезёт; если они в конце таблицы, то придётся просмотреть, и проверить на условия, все записи в таблице. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2019, 19:59 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=39867307&tid=1687207]: |
0ms |
get settings: |
5ms |
get forum list: |
14ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
134ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
| others: | 221ms |
| total: | 445ms |

| 0 / 0 |
