powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / На одном из окружений оптимизатор не берет уникальные индексы для доступа к данным
23 сообщений из 48, страница 2 из 2
На одном из окружений оптимизатор не берет уникальные индексы для доступа к данным
    #39766679
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EvgeniaMakarovaмне не надо переписывать, мне надо понять почему он индексы не юзает.Переписать - не надо, трассы почитать - не в состоянии. Ты вообще там кто?
...
Рейтинг: 0 / 0
На одном из окружений оптимизатор не берет уникальные индексы для доступа к данным
    #39766680
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EvgeniaMakarova,

Даже думаю лучше так:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
SELECT   /*+FIRST_ROWS*/
    col2,
    col5
FROM
    (
        SELECT
            f.col2,
            f.col5
        FROM
            t4 f
        UNION ALL
        SELECT
            a.col2,
            nvl( (select e.col5
                    from t2 b,
                         t1 c,
                         t3 d,
                         t4 e
                   WHERE a.col2 = b.col2
                     AND b.col1 = c.col1
                     AND b.col1 = d.col1
--                     AND c.col1 = d.col1
                     AND d.col3 = e.col3
                  )
             ,-1) col5
        FROM
            (   SELECT g.col2
                  FROM t6 g
                minus
                SELECT col2
                  FROM t4
            ) a
     ) t
ORDER BY col2;
...
Рейтинг: 0 / 0
На одном из окружений оптимизатор не берет уникальные индексы для доступа к данным
    #39766683
EvgeniaMakarova
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SY,
на проблематичном выдает так :
optimizer_adaptive_plans boolean TRUE
optimizer_adaptive_reporting_only boolean FALSE
optimizer_adaptive_statistics boolean FALSE
parallel_adaptive_multi_user boolean FALSE

на нормальном тоже самое плюс еще параметры
NAME TYPE VALUE
------------------------------------- ------- ------
_adaptive_window_consolidator_enabled boolean TRUE
_optimizer_adaptive_cursor_sharing boolean TRUE
_optimizer_nlj_hj_adaptive_join boolean TRUE
_optimizer_strans_adaptive_pruning boolean TRUE
_px_adaptive_dist_bypass_enabled boolean TRUE
_px_adaptive_dist_method string CHOOSE
optimizer_adaptive_plans boolean TRUE
optimizer_adaptive_reporting_only boolean FALSE
optimizer_adaptive_statistics boolean FALSE
parallel_adaptive_multi_user boolean FALSE
...
Рейтинг: 0 / 0
На одном из окружений оптимизатор не берет уникальные индексы для доступа к данным
    #39766686
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посколько optimizer_adaptive_features не вижу, ты на 12.2. На 12.2 с adaptive особо не баловался. Попробуй банально ALTER SESSION SET optimizer_adaptive_plans = FALSE; выполни SQL и посмотри результат.

SY.
...
Рейтинг: 0 / 0
На одном из окружений оптимизатор не берет уникальные индексы для доступа к данным
    #39766689
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SYПосколько optimizer_adaptive_features не вижу, ты на 12.2.
На 12.1 патчик был (вроде в составе CPU от осени 2017), который разделял общий optimizer_adaptive_features на optimizer_adaptive_plans и optimizer_adaptive_statistics а-ля 12.2.
...
Рейтинг: 0 / 0
На одном из окружений оптимизатор не берет уникальные индексы для доступа к данным
    #39766699
EvgeniaMakarova
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SY,

все равно не юзает индексы.
я там выше спрашивала, может пропустили, а может я глупость спросила - для юник индекса в плане кардинальность не 1 (см аттач) . так может быть ?
...
Рейтинг: 0 / 0
На одном из окружений оптимизатор не берет уникальные индексы для доступа к данным
    #39766701
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
как я рад, что врачи так не работают
...
Рейтинг: 0 / 0
На одном из окружений оптимизатор не берет уникальные индексы для доступа к данным
    #39766702
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousНа 12.1 патчик был (вроде в составе CPU от осени 2017), который разделял общий optimizer_adaptive_features на optimizer_adaptive_plans и optimizer_adaptive_statistics а-ля 12.2.

Не раделил а добавил:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
SQL> select version from v$instance;

VERSION
-----------------
12.1.0.2.0

SQL> SHOW PARAMETER ADAPTIVE

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
optimizer_adaptive_features          boolean     FALSE
optimizer_adaptive_plans             boolean     FALSE
optimizer_adaptive_reporting_only    boolean     FALSE
optimizer_adaptive_statistics        boolean     FALSE
parallel_adaptive_multi_user         boolean     TRUE
SQL> alter session set optimizer_adaptive_features = true;

Session altered.

SQL> SHOW PARAMETER ADAPTIVE

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
optimizer_adaptive_features          boolean     TRUE
optimizer_adaptive_plans             boolean     TRUE
optimizer_adaptive_reporting_only    boolean     FALSE
optimizer_adaptive_statistics        boolean     TRUE
parallel_adaptive_multi_user         boolean     TRUE
SQL> 



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

раз с 10053 не справилась, дай хоть отчет sqld360 по этому запросу с обоих баз
...
Рейтинг: 0 / 0
На одном из окружений оптимизатор не берет уникальные индексы для доступа к данным
    #39766705
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну тады 10053 тебе в руки :)

SY.
...
Рейтинг: 0 / 0
На одном из окружений оптимизатор не берет уникальные индексы для доступа к данным
    #39766706
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SYНе раделил а добавил:
По инструкции optimizer_adaptive_features надо было убрать из spfile :)
...
Рейтинг: 0 / 0
На одном из окружений оптимизатор не берет уникальные индексы для доступа к данным
    #39766707
EvgeniaMakarova
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SY,
ну озадачу админов тогда делать 10053 все же . спасибо. будут новости -напишу
...
Рейтинг: 0 / 0
На одном из окружений оптимизатор не берет уникальные индексы для доступа к данным
    #39766708
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EvgeniaMakarovaдля юник индекса в плане кардинальность не 1 (см аттач) . так может быть ?

Конечно может.
...и это вполне объективная причина проигнорить индекс.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
create table dropme_t (n not null unique)
as select rownum from dual connect by level < 1e5;

Table created

explain plan for
  select * from dropme_t where n = :1;

Explained

select * from table(dbms_xplan.display());

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Plan hash value: 2448883205
--------------------------------------------------------------------------------
| Id  | Operation         | Name         | Rows  | Bytes | Cost (%CPU)| Time
--------------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |              |     1 |     5 |     1   (0)| 00:00:01
|*  1 |  INDEX UNIQUE SCAN| SYS_C0058790 |     1 |     5 |     1   (0)| 00:00:01
--------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
   1 - access("N"=TO_NUMBER(:1))

13 rows selected

explain plan for
  select * from dropme_t where n >= :1;

Explained

select * from table(dbms_xplan.display());

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Plan hash value: 1749615820
--------------------------------------------------------------------------------
| Id  | Operation        | Name         | Rows  | Bytes | Cost (%CPU)| Time
--------------------------------------------------------------------------------
|   0 | SELECT STATEMENT |              |  5000 | 25000 |     2   (0)| 00:00:01
|*  1 |  INDEX RANGE SCAN| SYS_C0058790 |  5000 | 25000 |     2   (0)| 00:00:01
--------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
   1 - access("N">=TO_NUMBER(:1))
13 rows selected

SQL> 

...
Рейтинг: 0 / 0
На одном из окружений оптимизатор не берет уникальные индексы для доступа к данным
    #39766710
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousКонечно может.
...хотя у Вас же unique scan... Статистику не пробовали пересобрать?
...
Рейтинг: 0 / 0
На одном из окружений оптимизатор не берет уникальные индексы для доступа к данным
    #39766717
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
...
Рейтинг: 0 / 0
На одном из окружений оптимизатор не берет уникальные индексы для доступа к данным
    #39766722
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousSYНе раделил а добавил:
По инструкции optimizer_adaptive_features надо было убрать из spfile :)

Согласен, но если не ошибаюсь alter session set optimizer_adaptive_features = true; все равно свое дело сделает.

SY.
...
Рейтинг: 0 / 0
На одном из окружений оптимизатор не берет уникальные индексы для доступа к данным
    #39766734
Dshedoo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пардоньте за вопрос, но объём возвращаемых данных на всех окружениях одинаковый?
...
Рейтинг: 0 / 0
На одном из окружений оптимизатор не берет уникальные индексы для доступа к данным
    #39766914
EvgeniaMakarova
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dshedoo,

я не могу дождаться результата запроса на проблемном сервере.

Но. Мне админы прислали трейсы 10053 с обоих серверов и на проблематичном сервере видно что идет dynamic sampling по двум табам из запроса.
Попросила их пересобрать статистику. посмотрим .
...
Рейтинг: 0 / 0
На одном из окружений оптимизатор не берет уникальные индексы для доступа к данным
    #39766957
EvgeniaMakarova
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dshedoo,

переписанный Вами запрос,Ваша версия, возвращает одинаковое число строк на всех окружениях.

Я на всякий случай сравнила с числом строк возвращаемых исходным запросом на "быстром окружении" - старый запрос возвращает где-то в три раза больше строк, и на проверку они конечно оказались дубликатами.
...
Рейтинг: 0 / 0
На одном из окружений оптимизатор не берет уникальные индексы для доступа к данным
    #39767024
EvgeniaMakarova
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вобщем ДБА пишут что статистику удалили и собрали заново и такая же фигня.

Из трейс файлов 10053 я докопалась что запрос :

SELECT
a.col1
FROM
t1 a
WHERE
NOT
EXISTS (
SELECT
1
FROM
t2 b
WHERE
b.col1 = a.col1
)
*при not in - такое же поведение оптимизатора

на проблемном сервере НЕ юзает индекс по t1 (col1 - первичный ключ), но при поиске просто EXISTS -юзает unique index по col1

на другом сервер юзает индекс в обоих случаях и делает райт анти джойн.

Есть мысли почему ?
...
Рейтинг: 0 / 0
На одном из окружений оптимизатор не берет уникальные индексы для доступа к данным
    #39767043
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
EvgeniaMakarovaЕсть мысли почему ?вы издеваетесь? гадать при том, что вы уже даже получили трейсы, но не хотите их показать?
...
Рейтинг: 0 / 0
На одном из окружений оптимизатор не берет уникальные индексы для доступа к данным
    #39767046
Dshedoo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как вариант, всё дело в самих данных.

В t1 лежит всего пару-тройку записей, которые есть в t2, поэтому при EXISTS'е он идёт по PK.
А так как 99% всех записей из t1 нет в t2, то оракл не заморачиваясь сразу смотрит всю таблицу.

Посмотрите соотношение EXISTS и NOT EXISTS записей на разных окружениях.
...
Рейтинг: 0 / 0
На одном из окружений оптимизатор не берет уникальные индексы для доступа к данным
    #39767176
EvgeniaMakarova
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dshedoo,

Ребята, я разобралась:-)

На "плохом" окружении ВСЕ столбцы которые not null идут NOVALIDATE..., в том числе те уникальные которые идут в соединениях и тп. ВСЕ вообще.


На двух других "хороших" они идут not null validated.

Ларчик не просто открывался, учитывая что я думала что как минимум две 12-ки развернуты одним и тем же способом из одного и того же дампа и разницы в определениях таб нет.
Незнаю как админы так наразворачивали БД. Знаю что они делали миграцию с 10-ки на 12-ку и чтото пошло не так, подробностей не знаю, потом вроде починили.
...
Рейтинг: 0 / 0
23 сообщений из 48, страница 2 из 2
Форумы / Oracle [игнор отключен] [закрыт для гостей] / На одном из окружений оптимизатор не берет уникальные индексы для доступа к данным
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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