|
Странное поведение оптимизатора
|
|||
---|---|---|---|
#18+
Добрый день! Наткнулся на проблему, если добавить SYSDATE в запрос, работающий через DBLink, оптимизатор начинает творить какую-то дичь и тянуть данные с ремоута: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
Если убрать SYSDATE, всё выполняется на удалённой базе: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
Может, кто лучше знаком с Ораклом, подскажет из-за чего такой странный план получается? Хинтами стабилизировать запрос не удаётся, но если обернуть системную дату в COALESCE(SYSDATE,to_date('11.11.11','DD.MM.YY')), всё становится на свои места, в то же время если обернуть в NVL(SYSDATE,to_date('11.11.11','DD.MM.YY')) , план остаётся ущербным. Без JOIN BRD_SPT_COORDS_TBL@WH_NEW запрос всегда выполняется на ремоуте, но он тут нужен. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2018, 13:19 |
|
Странное поведение оптимизатора
|
|||
---|---|---|---|
#18+
Забыл Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2018, 13:22 |
|
Странное поведение оптимизатора
|
|||
---|---|---|---|
#18+
Sysdate всегда локальный. Добавь его в предикаты, чтобы увидеть, как это выглядит. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2018, 13:33 |
|
Странное поведение оптимизатора
|
|||
---|---|---|---|
#18+
Elic, не совсем тебя понял, куда надо смотреть? Пробовал добавить вот такого монстра в запрос AND CAST(CURRENT_TIMESTAMP AS DATE) BETWEEN SYSDATE-1 AND SYSDATE+1 но на план это никак не повлияло. Oracle вычисления выполняет на ремоуте и не тащит таблицы на локальную базу. И, что странно, COALESCE(SYSDATE, NULL) или MAX(SYSDATE) не заставляют тащить данные на локальную db, а NVL(SYSDATE, NULL) - заставляет. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2018, 13:51 |
|
Странное поведение оптимизатора
|
|||
---|---|---|---|
#18+
На других базах столкнулся, но теперь монстр стал ещё страшнее (: Код: plsql 1.
Причём объединить на удалёнке и передать базе результирующий датасет, мешает только SYSDATE и TRUNC(SYSDATE). Определение, например, квартала не ломает план, хотя если брать отдельно транки или add_month всё летит: Код: plsql 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2019, 15:31 |
|
|
start [/forum/topic.php?fid=52&msg=39740355&tid=1881791]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
43ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
others: | 265ms |
total: | 392ms |
0 / 0 |