Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 оптимизация запроса  [new]
reaque
Member

Откуда:
Сообщений: 84
Oracle Database 11.2.0.3.0
есть таблица на 30 млн строк.
на таблице нет индексов

сделал запрос к таблице с отбором по реквизиту Marka= 1111
--------------------------------------------------------------------------
| Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |      |    16M|  1964M|   150K  (1)| 00:30:02 |
|*  1 |  TABLE ACCESS FULL| NOM  |    16M|  1964M|   150K  (1)| 00:30:02 |
--------------------------------------------------------------------------



добавил индекс create index MyIndex on Table1(marka);
сделал запрос к таблице с отбором по реквизиту Marka= 1111
--------------------------------------------------------------------------
| Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |      |    16M|  1964M|   150K  (1)| 00:30:02 |
|*  1 |  TABLE ACCESS FULL| NOM  |    16M|  1964M|   150K  (1)| 00:30:02 |
--------------------------------------------------------------------------



выполнил анализ индекса analyze index MyIndex compute statistics;
сделал запрос к таблице с отбором по реквизиту Marka= 1111
--------------------------------------------------------------------------
| Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |      |    16M|  1964M|   150K  (1)| 00:30:02 |
|*  1 |  TABLE ACCESS FULL| NOM  |    16M|  1964M|   150K  (1)| 00:30:02 |
--------------------------------------------------------------------------



добавил в запрос хинт SELECT /*+ index(MyIndex) */ ...
сделал запрос к таблице с отбором по реквизиту Marka= 1111
--------------------------------------------------------------------------
| Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |      |    16M|  1964M|   150K  (1)| 00:30:02 |
|*  1 |  TABLE ACCESS FULL| NOM  |    16M|  1964M|   150K  (1)| 00:30:02 |
--------------------------------------------------------------------------


почему не используется индекс?


запустил SQL Tuning Advisor
 Для этого оператора найден потенциально более оптимальный план выполнения.

  Recommendation (estimated benefit: 98.61%)
  ------------------------------------------
  - С целью использования параллельного выполнения для этого оператора
    рекомендуется принять предлагаемый профиль SQL.
    execute dbms_sqltune.accept_sql_profile(task_name => 'staName17406',
            task_owner => 'SYSTEM', replace => TRUE, profile_type =>
            DBMS_SQLTUNE.PX_PROFILE);

  Выполнение этого запроса параллельно с DOP 80 улучшит время его отклика на
  98.61% в сравнении с исходным планом. Но при включении параллельного
  выполнения возникает ряд накладных расходов. Повысится потребление
  операторами памяти приблизительно на 11.03%, что может вызвать снижение
  пропускной способности системы. Кроме того, т.к. ресурсы потребляются за
  относительно небольшой отрезок времени, время отклика текущего оператора
  может иметь отрицательное влияние, если не обеспечена надлежащая емкость


Как узнать какие конкретно операции оптимизатор выполнит, если запустить execute dbms_sqltune.accept_sql_profile, чтобы их можно было воспроизвести вручную, при необходимости откатить назад?

Сообщение было отредактировано: 9 июн 20, 13:12
9 июн 20, 13:09    [22148019]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация запроса  [new]
xtender
Member

Откуда: Мск
Сообщений: 5478
reaque
почему не используется индекс?
пересобрать статистику надо по таблице и показать


reaque
Как узнать какие конкретно операции оптимизатор выполнит, если запустить execute dbms_sqltune.accept_sql_profile, чтобы их можно было воспроизвести вручную, при необходимости откатить назад?
https://github.com/xtender/xt_scripts/blob/master/profiles/show_hints.sql
9 июн 20, 13:30    [22148047]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация запроса  [new]
reaque
Member

Откуда:
Сообщений: 84
спасиб, после выполнения
analyze table MyTable compute statistics;

индекс начал использоваться.
9 июн 20, 14:03    [22148082]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация запроса  [new]
tru55
Member

Откуда: СПб
Сообщений: 19787
reaque,

Вы до сих пор используете ANALYZE TABLE вместо dbms_stats ? Тогда мы идем к вам :)
9 июн 20, 14:46    [22148110]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация запроса  [new]
Melkomyagkii_newbi
Member

Откуда: из прошлого
Сообщений: 1777
reaque

добавил в запрос хинт SELECT /*+ index(MyIndex) */ ...

неправильный синтаксис хинта
15 июн 20, 20:51    [22151246]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить