
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
21.06.2003, 12:41:14
|
|||
|---|---|---|---|
Как затавить Оракл заново построить план для запроса? |
|||
|
#18+
Т.е. чтобы он при повторном выполнении запроса не брал план откуда-то из кэша, а построил его заново. И кстати, можно ли однозначно утверждать, что предложение Misses in library cache during parse: 0 из tkprof означает что он запрос заново не разбирал? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
21.06.2003, 13:08:25
|
|||
|---|---|---|---|
Как затавить Оракл заново построить план для запроса? |
|||
|
#18+
alter system flush shared poll; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
21.06.2003, 13:18:41
|
|||
|---|---|---|---|
|
|||
Как затавить Оракл заново построить план для запроса? |
|||
|
#18+
Может лучше менять сам запрос? По-моему, для выборки из кеша требуется полное совпадение, интересно относится ли это к комментариям? Перед запросом берешь sysdate или systimestamp, или значение из sequence, и вставляешь в запрос: Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
21.06.2003, 14:13:21
|
|||
|---|---|---|---|
Как затавить Оракл заново построить план для запроса? |
|||
|
#18+
должно относиться ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
21.06.2003, 14:32:48
|
|||
|---|---|---|---|
Как затавить Оракл заново построить план для запроса? |
|||
|
#18+
А если у меня у функции из пакета описание ее работы на ХХ кб. и таких функций ХХХХХ и все они часто используются и хранятся в кэше ... Не думаю, что комментарии хранятся в откомпилированном коде. Лишний объем данных ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
21.06.2003, 14:48:39
|
|||
|---|---|---|---|
Как затавить Оракл заново построить план для запроса? |
|||
|
#18+
речь шла о комментариях внутри SQL-запросов. Не будет Оракл посимвольно сравнивать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
21.06.2003, 14:52:49
|
|||
|---|---|---|---|
|
|||
Как затавить Оракл заново построить план для запроса? |
|||
|
#18+
Тебе требуется построить рабочую систему, которая требует, чтобы все или некоторые запросы парсились каждый раз заново, или это желание протестировать существующую систему, к примеру по затратам на парсинг? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
21.06.2003, 15:27:27
|
|||
|---|---|---|---|
Как затавить Оракл заново построить план для запроса? |
|||
|
#18+
2 killed Не заметил ... Сорри ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
21.06.2003, 16:11:15
|
|||
|---|---|---|---|
Как затавить Оракл заново построить план для запроса? |
|||
|
#18+
В принципе мне надо просто понять почему запрос выполняется не по хинту. Тема это уже другая, но чтоб новую ветку не открывать... Так вот, имеем табличку 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 говорил, и ткпрофом смотрел, что вроде по новой план строит. А по индексу он все равно не хочет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
21.06.2003, 17:05:20
|
|||
|---|---|---|---|
Как затавить Оракл заново построить план для запроса? |
|||
|
#18+
Интересное наблюдение, если в выбираемые столбцы поставить не * а например num1 или num1, num2 т.е. столбцы участвующие в индексе то запрос отрабатывает используя хинт, т.е. по индексу. Как только добавляем столбец не входящий в индекс - пинцет, фул скан. Сдается мне все это связано с тем, что num2 в индексе desc, но каким образом и как это вылечить, пока не ясно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
21.06.2003, 17:58:19
|
|||
|---|---|---|---|
Как затавить Оракл заново построить план для запроса? |
|||
|
#18+
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? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
23.06.2003, 11:25:48
|
|||
|---|---|---|---|
Как затавить Оракл заново построить план для запроса? |
|||
|
#18+
to SY: извини, что по русски, мой английский ужасен :)) Я согласен, что фул скан дешевле, т.к. он не может все данные взять из индекса, и 32000 строк это мало. Но есть одно маленькое гигантское НО, мне нужно чтобы результат запроса был отсортирован по указанному в хинте индексу. Насколько я понимаю Оракл должен использовать хинт если это возможно в принципе, т.е. плюя на стоимость. Вот если бы индекса не существовало, или статистика была старая или что-то еще, тогда понятно, на нет и суда нет. А вот почему он в этом случае основывается на стоимости а не на хинте мне непонятно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
23.06.2003, 14:38:47
|
|||
|---|---|---|---|
Как затавить Оракл заново построить план для запроса? |
|||
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=52&mobile=1&tid=1989866]: |
0ms |
get settings: |
8ms |
get forum list: |
26ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
56ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
39ms |
get tp. blocked users: |
1ms |
| others: | 195ms |
| total: | 344ms |

| 0 / 0 |
