Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / оптимизация запроса / 5 сообщений из 5, страница 1 из 1
09.06.2020, 13:09
    #39967379
reaque
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оптимизация запроса
Oracle Database 11.2.0.3.0
есть таблица на 30 млн строк.
на таблице нет индексов

сделал запрос к таблице с отбором по реквизиту Marka= 1111
Код: plsql
1.
2.
3.
4.
5.
6.
--------------------------------------------------------------------------
| 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
Код: plsql
1.
2.
3.
4.
5.
6.
--------------------------------------------------------------------------
| 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
Код: plsql
1.
2.
3.
4.
5.
6.
--------------------------------------------------------------------------
| 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
Код: plsql
1.
2.
3.
4.
5.
6.
--------------------------------------------------------------------------
| 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
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
 Для этого оператора найден потенциально более оптимальный план выполнения.

  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, чтобы их можно было воспроизвести вручную, при необходимости откатить назад?
...
Рейтинг: 0 / 0
09.06.2020, 13:30
    #39967394
Sayan Malakshinov
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оптимизация запроса
reaque
почему не используется индекс?
пересобрать статистику надо по таблице и показать


reaque
Как узнать какие конкретно операции оптимизатор выполнит, если запустить execute dbms_sqltune.accept_sql_profile, чтобы их можно было воспроизвести вручную, при необходимости откатить назад?
https://github.com/xtender/xt_scripts/blob/master/profiles/show_hints.sql
...
Рейтинг: 0 / 0
09.06.2020, 14:03
    #39967402
reaque
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оптимизация запроса
спасиб, после выполнения
Код: plsql
1.
analyze table MyTable compute statistics;


индекс начал использоваться.
...
Рейтинг: 0 / 0
09.06.2020, 14:46
    #39967421
tru55
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оптимизация запроса
reaque,

Вы до сих пор используете ANALYZE TABLE вместо dbms_stats ? Тогда мы идем к вам :)
...
Рейтинг: 0 / 0
15.06.2020, 20:51
    #39969520
Melkomyagkii_newbi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оптимизация запроса
reaque

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

неправильный синтаксис хинта
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / оптимизация запроса / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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