powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Настройка плана запроса
7 сообщений из 7, страница 1 из 1
Настройка плана запроса
    #39936024
Mladshiy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дано:
Oracle 12.2
На одном экземпляре две одинаковые схемы (импортированны из одного источника).
На схеме №1 селект строит запрос с использованием индекса и отрабатывает за 8 секунд, на схеме №2 индекс игнорируется и идет скан всей таблицы и отрабатывает 40 минут.
Почему так?

Что уже проверил:
Индексы на таблице DOBJCODE_DBT в обоих схемах одинаковые (даже ребилдил).
Статистику по этой таблице пересобирал и сами схемы пересоздаются раз в неделю с последующим сбором статистики.
Данные в индексируемых полях сравнивал - в обоих схемах одинаковые.

Схема №1
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Query Plan	Rows
SELECT STATEMENT   Cost = 3305	      
TABLE ACCESS BY INDEX ROWID BATCHED DOBJCODE_DBT 	    1 
    INDEX SKIP SCAN DOBJCODE_DBT_IDX2 	    1 
TABLE ACCESS BY INDEX ROWID BATCHED DOBJCODE_DBT 	    1 
    INDEX SKIP SCAN DOBJCODE_DBT_IDX2 	    1 
SORT ORDER BY  	    1 
    FILTER   	      
        TABLE ACCESS FULL DPERSN_DBT 	    4K
        TABLE ACCESS BY INDEX ROWID BATCHED DPERSNIDC_DBT 	    1 
            INDEX RANGE SCAN DPERSNIDC_DBT_IDX4 	    1 
        TABLE ACCESS BY INDEX ROWID BATCHED DOBJCODE_DBT 	    1 
            INDEX SKIP SCAN DOBJCODE_DBT_IDX2 	    1 



Схема №2
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Query Plan	Rows
SELECT STATEMENT   Cost = 4122	      
TABLE ACCESS FULL DOBJCODE_DBT 	  171 
TABLE ACCESS FULL DOBJCODE_DBT 	    8 
SORT ORDER BY  	   33 
    VIEW  VW_ORE_A263DEE6 	   33 
        UNION-ALL   	      
            TABLE ACCESS BY INDEX ROWID BATCHED DPERSN_DBT 	    1 
                INDEX RANGE SCAN DPERSN_DBT_IDXI 	    1 
            FILTER   	      
                TABLE ACCESS FULL DPERSN_DBT 	   96K
                TABLE ACCESS BY INDEX ROWID DPERSNIDC_DBT 	    1 
                    INDEX UNIQUE SCAN DPERSNIDC_DBT_IDX0 	    1 
                TABLE ACCESS FULL DOBJCODE_DBT 	  171
...
Рейтинг: 0 / 0
Настройка плана запроса
    #39936039
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mladshiy
Дано:
Oracle 12.2
На одном экземпляре две одинаковые схемы (импортированны из одного источника).
На схеме №1 селект строит запрос с использованием индекса и отрабатывает за 8 секунд, на схеме №2 индекс игнорируется и идет скан всей таблицы и отрабатывает 40 минут.
Почему так?

Что уже проверил:
Индексы на таблице DOBJCODE_DBT в обоих схемах одинаковые (даже ребилдил).
Статистику по этой таблице пересобирал и сами схемы пересоздаются раз в неделю с последующим сбором статистики.
Данные в индексируемых полях сравнивал - в обоих схемах одинаковые.

Схема №1
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Query Plan	Rows
SELECT STATEMENT   Cost = 3305	      
TABLE ACCESS BY INDEX ROWID BATCHED DOBJCODE_DBT 	    1 
    INDEX SKIP SCAN DOBJCODE_DBT_IDX2 	    1 
TABLE ACCESS BY INDEX ROWID BATCHED DOBJCODE_DBT 	    1 
    INDEX SKIP SCAN DOBJCODE_DBT_IDX2 	    1 
SORT ORDER BY  	    1 
    FILTER   	      
        TABLE ACCESS FULL DPERSN_DBT 	    4K
        TABLE ACCESS BY INDEX ROWID BATCHED DPERSNIDC_DBT 	    1 
            INDEX RANGE SCAN DPERSNIDC_DBT_IDX4 	    1 
        TABLE ACCESS BY INDEX ROWID BATCHED DOBJCODE_DBT 	    1 
            INDEX SKIP SCAN DOBJCODE_DBT_IDX2 	    1



Схема №2
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Query Plan	Rows
SELECT STATEMENT   Cost = 4122	      
TABLE ACCESS FULL DOBJCODE_DBT 	  171 
TABLE ACCESS FULL DOBJCODE_DBT 	    8 
SORT ORDER BY  	   33 
    VIEW  VW_ORE_A263DEE6 	   33 
        UNION-ALL   	      
            TABLE ACCESS BY INDEX ROWID BATCHED DPERSN_DBT 	    1 
                INDEX RANGE SCAN DPERSN_DBT_IDXI 	    1 
            FILTER   	      
                TABLE ACCESS FULL DPERSN_DBT 	   96K
                TABLE ACCESS BY INDEX ROWID DPERSNIDC_DBT 	    1 
                    INDEX UNIQUE SCAN DPERSNIDC_DBT_IDX0 	    1 
                TABLE ACCESS FULL DOBJCODE_DBT 	  171 

Для оформления кода используйте тег SRC этого форума
...
Рейтинг: 0 / 0
Настройка плана запроса
    #39936041
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Mladshiy,

получите и сравните трассу 10053 (оптимизатора), например, так: https://blogs.oracle.com/optimizer/capturing-10053-trace-files-continued
...
Рейтинг: 0 / 0
Настройка плана запроса
    #39936042
PuM256
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mladshiy,

Покажи планы в читабельном виде (DBMS_XPLAN) и с предикатами.
А лучше сразу трассу 10053.
...
Рейтинг: 0 / 0
Настройка плана запроса
    #39936050
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Схема №1
Код: plsql
1.
INDEX SKIP SCAN


На правах догадки: а не отключен ли параметр _optimizer_skip_scan_enabled?
покажите вывод этого запроса:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
select  name as parameter
       ,decode
         (p.type
         ,1,'boolean'
         ,2,'string'
         ,3,'number'
         ,4,'file'
         ,6,'size(bytes)'
         ,'Unknown: '||p.type) type
       ,description
       ,decode(p.type,6,p.display_value,p.value) as value
       ,update_comment
       ,ISMODIFIED
       ,ISADJUSTED
       ,ISDEPRECATED
       ,ISBASIC
       ,ISSES_MODIFIABLE
       ,ISSYS_MODIFIABLE
       ,ISINSTANCE_MODIFIABLE
from v$parameter p
where p.isdefault='FALSE'
and p.name not like 'log_archive_dest%'
and p.name like '\_%' escape '\'

...
Рейтинг: 0 / 0
Настройка плана запроса
    #39936059
PuM256
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
xtender,

Тоже подумал, но автор говорит, что у него один инстанс... Хотя может кто-то зачем-то alter session делает.
...
Рейтинг: 0 / 0
Настройка плана запроса
    #39936070
Melkomyagkii_newbi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mladshiy
селект строит запрос с использованием индекса и отрабатывает за 8 секунд, на схеме №2 индекс игнорируется


На схеме 2 запрос вы первый запускаете, или он там уже в наличии с построенным планом? Если второе, то можно для чистоты эксперимента удалить его из шаред пула:

Код: plsql
1.
2.
3.
4.
select ADDRESS, HASH_VALUE from V$SQLAREA where SQL_ID = '&sql_id'; --search for parameters for  flushing


BEGIN DBMS_SHARED_POOL.PURGE ( '0000001268D24698, 4008162215' , 'C' ); END; 
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Настройка плана запроса
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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