Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
STOPKEY после PARTITION RANGE ITERATOR при динамическом partition pruning
|
|||
|---|---|---|---|
|
#18+
Есть: таблица с range (ну или interval) партиционированием по дате. Нужно найти первую строку начиная с самой поздней партиции с заданными границами по дате партиционирования. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Если никаких фильтров на дату партиционирования нет, то всё хорошо - STOPKEY идёт сразу после TABLE ACCESS и до PARTITION RANGE ALL: Код: plsql 1. 2. 3. 4. 5. Что получили: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Начали сканить с 4й по 1ю партицию, но просканили только одну, нашли 1 строку и закончили. Благодаря тому что STOPKEY находится под PARTITION RANGE ALL Если задать только правую границу, то тоже всё хорошо: Код: plsql 1. 2. 3. 4. 5. 6. Получили: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. в общем-то, всё также, только теперь сканим не с 4й, а с вычисленной партиции, всё логично. С заданной только левой границей всё тоже самое, всё ожидаемо. А вот с обеими заданными границами начинаются проблемы: Код: plsql 1. 2. 3. 4. 5. 6. 7. и получили лажу: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. STOPKEY теперь делается после PARTITION RANGE ITERATOR. Это приводит к тому что сканим 2 партиции, получаем 2 строки. Не понимаю, каким образом тут мешает (и мешает ли) появившийся фильтр(4) валидиции границ (правая >= левой) - :D_2020_01_12>=:D_2020_01_11 Подобное обсуждали вот тут , а прям конкретно эта проблема вот там (предложили написать d+0 >=, но это ерунда потому что ломает прунинг по левой границе). Что делать, неясно. Есть мысли? P.S. Проблема только с биндами - с литералами всё прекрасно. P.P.S. Тесткейс упростил максимально (в сравнении с бизнес задачей). Возможно, даже слишком - усложню, если нужно. P.P.P.S. 11.2, 19c - одинаково плохо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2020, 18:22 |
|
||
|
STOPKEY после PARTITION RANGE ITERATOR при динамическом partition pruning
|
|||
|---|---|---|---|
|
#18+
На мой взгляд это баг. Оптимизатор не видит, что в случае KEY/KEY партиции в PARTITION RANGE ITERATOR будут сканироваться по порядку, согласно сортировке. Workarounds: Код: plsql 1. или Код: plsql 1. в сессии или хинтом, например, Код: plsql 1. Либо можно создать локальный индекс on TEST_PRUNING(d), чтобы вообще от сортировки избавиться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2020, 22:58 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39964208&tid=1881207]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
165ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
36ms |
get tp. blocked users: |
2ms |
| others: | 17ms |
| total: | 261ms |

| 0 / 0 |
