powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как затавить Оракл заново построить план для запроса?
13 сообщений из 13, страница 1 из 1
Как затавить Оракл заново построить план для запроса?
    #32188163
Um
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Т.е. чтобы он при повторном выполнении запроса не брал план откуда-то из кэша, а построил его заново.
И кстати, можно ли однозначно утверждать, что предложение
Misses in library cache during parse: 0
из tkprof означает что он запрос заново не разбирал?
...
Рейтинг: 0 / 0
Как затавить Оракл заново построить план для запроса?
    #32188195
LG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alter system flush shared poll;
...
Рейтинг: 0 / 0
Как затавить Оракл заново построить план для запроса?
    #32188214
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может лучше менять сам запрос? По-моему, для выборки из кеша требуется полное совпадение, интересно относится ли это к комментариям? Перед запросом берешь sysdate или systimestamp, или значение из sequence, и вставляешь в запрос:

Код: plaintext
1.
2.
select  /*my_value*/ 
...
...
Рейтинг: 0 / 0
Как затавить Оракл заново построить план для запроса?
    #32188287
Фотография killed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
должно относиться
...
Рейтинг: 0 / 0
Как затавить Оракл заново построить план для запроса?
    #32188311
LG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если у меня у функции из пакета описание ее работы на ХХ кб. и таких функций ХХХХХ и все они часто используются и хранятся в кэше ...
Не думаю, что комментарии хранятся в откомпилированном коде. Лишний объем данных ...
...
Рейтинг: 0 / 0
Как затавить Оракл заново построить план для запроса?
    #32188324
Фотография killed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
речь шла о комментариях внутри SQL-запросов.
Не будет Оракл посимвольно сравнивать.
...
Рейтинг: 0 / 0
Как затавить Оракл заново построить план для запроса?
    #32188329
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тебе требуется построить рабочую систему, которая требует, чтобы все или некоторые запросы парсились каждый раз заново, или это желание протестировать существующую систему, к примеру по затратам на парсинг?
...
Рейтинг: 0 / 0
Как затавить Оракл заново построить план для запроса?
    #32188382
LG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 killed
Не заметил ... Сорри ...
...
Рейтинг: 0 / 0
Как затавить Оракл заново построить план для запроса?
    #32188410
Um
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В принципе мне надо просто понять почему запрос выполняется не по хинту.
Тема это уже другая, но чтоб новую ветку не открывать...
Так вот, имеем табличку test

desc test
NUM1 NUMBER(10)
NUM2 NUMBER(10)
NUM3 NUMBER(10)
NAME VARCHAR2(100)
NAME1 VARCHAR2(100)

select count(*) from test;

COUNT(*)
----------
33280

по ней есть индекс test_idx

create index test_idx on test(num1, num2 desc, num3)

собираем статистику как положено:

exec dbms_stats.gather_table_stats(ownname=>'SCOTT', tabname=>'TEST', partname=>NULL);

PL/SQL procedure successfully completed.

exec dbms_stats.gather_index_stats(ownname=> 'SCOTT', indname=>'TEST_IDX', partname=>NULL);

PL/SQL procedure successfully completed.

выполняем запрос, а он вместо того штоб чесать по индексу, как в хинте сказано. вон чего вытворяет.

select /*+INDEX_ASC(test test_idx)*/ * from test
2 where (num1 > 222 or num1 = 222 and (num2 < 222 or num2 = 222 and (num3 >= 222)))
3 AND rownum < 10;

Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=208 Card=21320 Bytes
=4562480)

1 0 COUNT (STOPKEY)
2 1 CONCATENATION
3 2 FILTER
4 3 TABLE ACCESS (FULL) OF 'TEST' (Cost=104 Card=11960 B
ytes=2559440)

5 2 FILTER
6 5 TABLE ACCESS (FULL) OF 'TEST' (Cost=104 Card=11960 B
ytes=2559440)

я ему уж и alter system flush shared_pool говорил, и ткпрофом смотрел, что вроде по новой план строит. А по индексу он все равно не хочет.
...
Рейтинг: 0 / 0
Как затавить Оракл заново построить план для запроса?
    #32188449
Um
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интересное наблюдение, если в выбираемые столбцы поставить не * а например num1 или num1, num2 т.е. столбцы участвующие в индексе то запрос отрабатывает используя хинт, т.е. по индексу. Как только добавляем столбец не входящий в индекс - пинцет, фул скан.
Сдается мне все это связано с тем, что num2 в индексе desc, но каким образом и как это вылечить, пока не ясно.
...
Рейтинг: 0 / 0
Как затавить Оракл заново построить план для запроса?
    #32188476
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
I do not think it has anything to do with DESC. Most likely statisctics suggest that INDEX RANGE SCAN and then TABLE ACCESS BY ROWID is more costly than FULL SCAN. When you replace * with num1 TABLE ACCESS BY ROWID is not needed anymore since num1 is part of the index and INDEX RANGE SCAN alone becomes less costly than FULL SCAN.

SY.
P.S. 32,000 rows is not a big deal for full scan. Did you compare execution times?
...
Рейтинг: 0 / 0
Как затавить Оракл заново построить план для запроса?
    #32188900
Um
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to SY: извини, что по русски, мой английский ужасен :))
Я согласен, что фул скан дешевле, т.к. он не может все данные взять из индекса, и 32000 строк это мало. Но есть одно маленькое гигантское НО, мне нужно чтобы результат запроса был отсортирован по указанному в хинте индексу.
Насколько я понимаю Оракл должен использовать хинт если это возможно в принципе, т.е. плюя на стоимость. Вот если бы индекса не существовало, или статистика была старая или что-то еще, тогда понятно, на нет и суда нет. А вот почему он в этом случае основывается на стоимости а не на хинте мне непонятно.
...
Рейтинг: 0 / 0
Как затавить Оракл заново построить план для запроса?
    #32189187
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Um:

>Оракл должен использовать хинт если это возможно в принципе, т.е. плюя на стоимость

English word HINT - means намек а не приказ. Optimizer is free to take a hint or not. Outline plan is a different story. With outline plan you provide the whole execution plan for optimizer to use, not a "намек". As far as I know, statistics overrides hints most of the time (only Larry knows what exact rules are :)) . You can try deleting statistics on tables and indexes involved in your query, then you have a greater chance optimizer will take the hint. Or you can try outlines.

SY
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как затавить Оракл заново построить план для запроса?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]