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

Код: plaintext
1.
2.
select  /*my_value*/ 
...
...
Рейтинг: 0 / 0
21.06.2003, 14:13:21
    #32188287
killed
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как затавить Оракл заново построить план для запроса?
должно относиться
...
Рейтинг: 0 / 0
21.06.2003, 14:32:48
    #32188311
LG
LG
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как затавить Оракл заново построить план для запроса?
А если у меня у функции из пакета описание ее работы на ХХ кб. и таких функций ХХХХХ и все они часто используются и хранятся в кэше ...
Не думаю, что комментарии хранятся в откомпилированном коде. Лишний объем данных ...
...
Рейтинг: 0 / 0
21.06.2003, 14:48:39
    #32188324
killed
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как затавить Оракл заново построить план для запроса?
речь шла о комментариях внутри SQL-запросов.
Не будет Оракл посимвольно сравнивать.
...
Рейтинг: 0 / 0
21.06.2003, 14:52:49
    #32188329
Denis Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как затавить Оракл заново построить план для запроса?
Тебе требуется построить рабочую систему, которая требует, чтобы все или некоторые запросы парсились каждый раз заново, или это желание протестировать существующую систему, к примеру по затратам на парсинг?
...
Рейтинг: 0 / 0
21.06.2003, 15:27:27
    #32188382
LG
LG
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как затавить Оракл заново построить план для запроса?
2 killed
Не заметил ... Сорри ...
...
Рейтинг: 0 / 0
21.06.2003, 16:11:15
    #32188410
Um
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
21.06.2003, 17:05:20
    #32188449
Um
Um
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как затавить Оракл заново построить план для запроса?
Интересное наблюдение, если в выбираемые столбцы поставить не * а например num1 или num1, num2 т.е. столбцы участвующие в индексе то запрос отрабатывает используя хинт, т.е. по индексу. Как только добавляем столбец не входящий в индекс - пинцет, фул скан.
Сдается мне все это связано с тем, что num2 в индексе desc, но каким образом и как это вылечить, пока не ясно.
...
Рейтинг: 0 / 0
21.06.2003, 17:58:19
    #32188476
SY
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
23.06.2003, 11:25:48
    #32188900
Um
Um
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как затавить Оракл заново построить план для запроса?
to SY: извини, что по русски, мой английский ужасен :))
Я согласен, что фул скан дешевле, т.к. он не может все данные взять из индекса, и 32000 строк это мало. Но есть одно маленькое гигантское НО, мне нужно чтобы результат запроса был отсортирован по указанному в хинте индексу.
Насколько я понимаю Оракл должен использовать хинт если это возможно в принципе, т.е. плюя на стоимость. Вот если бы индекса не существовало, или статистика была старая или что-то еще, тогда понятно, на нет и суда нет. А вот почему он в этом случае основывается на стоимости а не на хинте мне непонятно.
...
Рейтинг: 0 / 0
23.06.2003, 14:38:47
    #32189187
SY
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
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как затавить Оракл заново построить план для запроса? / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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