Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Merge Join (Concatenation)
|
|||
|---|---|---|---|
|
#18+
Добрый день, коллеги. Недавно в ходе раздачи указаний подвластным мне серверам MS SQL я наткнулся на каприз с их стороны. Приведу скрипт, воспроизводящий ситуацию: Код: sql 1. 2. 3. 4. 5. 6. Этот скрипт выполняется посредством ступенчатых Merge Join (Concatenation); но если я добавляю в конкатенацию еще один селект, сервер меняет план выполнения на Concatenation и последующий Sort. Применение хинта OPTION (MERGE UNION) привело к сидячей забастовке - ответу "Query processor could not produce a query plan because of the hints defined in this query. Resubmit the query without specifying any hints and without using SET FORCEPLAN." На реальных данных такое поведение меня не совсем устраивает, стоимость плана возрастает более чем на порядок. Не то чтобы это стало для меня проблемой (много очевидных воркароундов, из которых выбран простейший - я стал забирать несортированный поток и сортировать сам). Но хотелось бы иметь прямые средства воздействия на оптимизатор сервера, который, видя более чем 64 таблицы в запросе, отвечает мне: "Я девочка. Я не хочу ничего решатьоптимизировать. Я хочу платьеконкатинировать." Я поискал их, но не нашел, если кто-то знает их, то прошу сообщить мне. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2019, 22:07 |
|
||
|
Merge Join (Concatenation)
|
|||
|---|---|---|---|
|
#18+
Лютый бред какой-то. Зачем 64 раза селектить пустую таблицу в одном запросе? А не пустую? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2019, 23:31 |
|
||
|
Merge Join (Concatenation)
|
|||
|---|---|---|---|
|
#18+
Гавриленко Сергей АлексеевичЛютый бред какой-то. Зачем 64 раза селектить пустую таблицу в одном запросе? А не пустую? Вы прямо как наш родной МИД. Пожалуйста, читайте внимательнее написанное мной. Вы спрашиваете, зачем селектить пустую таблицу? Потому что "скрипт, воспроизводящий ситуацию". Зачем мне создавать 64 таблицы, если на одной происходит то же самое? Более того, я единственное поле оставил по той же причине. И с пустотой та же петрушка - я прямо указал, что происходит на моих реальных данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2019, 09:29 |
|
||
|
Merge Join (Concatenation)
|
|||
|---|---|---|---|
|
#18+
.Евгений, Нашинкуйте на фрагменты: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2019, 10:29 |
|
||
|
Merge Join (Concatenation)
|
|||
|---|---|---|---|
|
#18+
.Евгений, Воспроизвести в общем-то не получилось, но и SP1-CU5 нет... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2019, 10:31 |
|
||
|
Merge Join (Concatenation)
|
|||
|---|---|---|---|
|
#18+
invmНашинкуйте на фрагменты: Это воркароунд, были мысли о нем, но не счел оптимальным. Ибо запрос создается динамически (для разных таблиц), и в таких ситуациях я всячески избегаю делать навороты в генерируемом содержимом. TaPaK.Евгений, Воспроизвести в общем-то не получилось, но и SP1-CU5 нет... Аналогичный план для Microsoft SQL Server 2012 (SP4) (KB4018073) - 11.0.7001.0 (X64) А на какой версии этой смены плана не происходит? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2019, 10:42 |
|
||
|
Merge Join (Concatenation)
|
|||
|---|---|---|---|
|
#18+
.ЕвгенийinvmНашинкуйте на фрагменты: Это воркароунд, были мысли о нем, но не счел оптимальным. Ибо запрос создается динамически (для разных таблиц), и в таких ситуациях я всячески избегаю делать навороты в генерируемом содержимом. TaPaK.Евгений, Воспроизвести в общем-то не получилось, но и SP1-CU5 нет... Аналогичный план для Microsoft SQL Server 2012 (SP4) (KB4018073) - 11.0.7001.0 (X64) А на какой версии этой смены плана не происходит? план менятся, ошибок нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2019, 10:47 |
|
||
|
Merge Join (Concatenation)
|
|||
|---|---|---|---|
|
#18+
TaPaKплан менятся, ошибок нет Я правильно понял, что у вас при объединении 65 экземпляров таблицы и указании хинта OPTION (MERGE UNION) создается план с конкатенациями, но ошибки "Query processor could not produce..." не происходит? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2019, 10:56 |
|
||
|
Merge Join (Concatenation)
|
|||
|---|---|---|---|
|
#18+
.ЕвгенийTaPaKплан менятся, ошибок нет Я правильно понял, что у вас при объединении 65 экземпляров таблицы и указании хинта OPTION (MERGE UNION) создается план с конкатенациями, но ошибки "Query processor could not produce..." не происходит? соврал на 65 падает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2019, 11:05 |
|
||
|
Merge Join (Concatenation)
|
|||
|---|---|---|---|
|
#18+
В общем, если кто-то найдет ссылку на документацию, описывающую поведение сервера в данной ситуации, или знает какую-то дубину (трейсфлаг и т.п.), посредством которой моих "девочек" можно насильно заставить сделать мне Merge Join 65 раз подряд - буду рад услышать. Не услышу - продолжу пользоваться воркароундами, которые сочту оптимальными в той или иной ситуации. P.S. Небольшой комментарий на тему "зачем". У меня организован архив входящих сообщений, разбитый на отдельные таблицы (ради управляемости, согласно типу и году-месяцу). Иногда эти сообщения нужно перечитать (и перезагрузить их содержимое в ХД) в порядке возрастания идентификатора. Шесть типов за год - вот мне и каприз. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2019, 11:33 |
|
||
|
Merge Join (Concatenation)
|
|||
|---|---|---|---|
|
#18+
.Евгений, если память не изменяет, стратегия слияния выбирается оптимизатором при наличии потребности или возможности обработки сортированных списков. Если появляется черная овца, то такая стратегия не может быть использована даже насильственным путём. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2019, 13:13 |
|
||
|
|

start [/forum/topic.php?fid=46&fpage=110&tid=1688114]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
26ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
| others: | 234ms |
| total: | 348ms |

| 0 / 0 |
