Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Настройка плана запроса / 7 сообщений из 7, страница 1 из 1
10.03.2020, 16:59
    #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
10.03.2020, 17:20
    #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
10.03.2020, 17:24
    #39936041
Sayan Malakshinov
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Настройка плана запроса
Mladshiy,

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

Покажи планы в читабельном виде (DBMS_XPLAN) и с предикатами.
А лучше сразу трассу 10053.
...
Рейтинг: 0 / 0
10.03.2020, 17:44
    #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
10.03.2020, 18:19
    #39936059
PuM256
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Настройка плана запроса
xtender,

Тоже подумал, но автор говорит, что у него один инстанс... Хотя может кто-то зачем-то alter session делает.
...
Рейтинг: 0 / 0
10.03.2020, 19:15
    #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
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Настройка плана запроса / 7 сообщений из 7, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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