вторник, 13 ноября 2012 г.

Планы выполнения запросов: Oracle и MSSQL

1. Инструменты получения и  просмотра планов выполнения запросов .
    1.1.MSSQL
Для просмотра диаграмы плана выполнения запроса необходимо:
а) сформировать запрос, для которого необходимо получить план выполнения
б) в меню Query включить  - Display Estimated Execution Plan.
После выполнения запроса на вкладке Execution Plan будет отображена диаграма выполнения плана запроса.
Второй вариант:
set showplan_text on
затем выполняем запрос

     1.2. Oracle
Для генерации плана выполнения запроса используются:
а) команда explain plan  и выборка из таблицы PLAN_TABLE
б)автотрассировка SQLPlus
в)Пакет dbms_xplan
г)Представление v$sql_plan
д) Результаты трассировки и tkprof
2. Примеры использования средств получения плана выполнения запроса в Oracle

2.1. Команда explain plan и выборка из таблицы PLAN_TABLE

Синтаксис:
EXPLAIN PLAN [SET STATEMENT_ID = 'text']
[INTO [schema .] table [@ dblink]] FOR statement;

Пример:
Сначала применяем команду

explain plan for
select from user_params
where parm_name like '%файл%'

Затем делаем выборку из plan_table

Select * from plan_table

Описание полей plan_table:

STATEMENT_ID  -  Идентификатор опции, которую вы определяете в операторе EP.
TIMESTAMP - Время и дата анализа оператора.
REMARKS - Некоторые комментарии (от 1 до 80 символов), которыми вы
                       захотите сопроводить каждый шаг объясняемого плана. Если вам
                       необходимо изменить или добавить комментарий в какой-либо
                       записи таблицыPLAN_TABLE, используйте оператор UPDATE.
OPERATION - Имя внутреннего оператора, выполняемого на этом шаге.
OPTIONS - Более детальное описание оператора, выполняемого на этом шаге.
OBJECT NODE - Имя указателя базы данных, используемое для возврата объекта
                 (имя таблицы или представления).
OBJECT OWNER - Имя пользователя, хозяина таблицы.
OBJECT NAME - Имя таблицы базы данных или индекса.
OBJECT INSTANCE - Число, соответствующее обычной позиции объекта, в которой он
                 расположен в оригинальном операторе. Нумерация происходит
                 слева направо по тексту оператора. Заметьте, что вид
                 расположения будет получен в непредсказуемых числах.

OBJECT TYPE - Модификатор, который представляет описательную информацию об
                 объекте базы данных, например, NON-UNIQUE для индексов.

SEARCH COLUMNS -  Не используется в настоящей версии.
ID - Число, назначаемое каждому шагу выполнения.
PARENT_ID  -   ID следующего шага выполнения, которое действует на вывод ID
                 шага. Чтобы описать как ID и PARENT_ID показывают порядок
                 выполнения плана выполнения
POSITION - Порядок выполнения для шагов, имеющих один и тот же PARENT_ID.
OTHER - Другая информация, которая специфична для шага выполнения и
                 которую пользователь может считать полезной. Например, для
                 распределенных запросов OTHER может содержать текст SQL
                 оператора, посылаемый к удаленному узлу.
Имена операций, используемых EXPLAIN PLAN.
-------------------------------------------------------

Операция                              Описание
--------------------------------------------------------------------
AND-EQUAL     Эта операция используется для фразы WHEN, содержащей
                             эквивалентные сравнения и AND вместе, где каждое сравнение
                             включает неуникальное индексное поле. При этом получается
                             запись из каждого сравнения и выполняется пересечение.

CONNECT BY    Выбор, основанный на поиске по дереву. Он используется для
                             выполнения фразы CONNECT BY в операторах SELECT.

CONCATENATION Выбор из группы таблиц.В основе операция UNION ALL.

COUNTING      Операция, которая подсчитывает количество записей,
                           выбранных из таблицы.

FILTER            Ограничение для записей, выбираемых из таблицы.
FIRST ROW     Выбор только первой записи результата запроса.
FOR UPDATE  Выбор,который размещает замки на выбранной записи.

INDEX         Выбор из индекса.Эта операция имеет полные опции.
             
INTERSECTION  Выбор записей,общих для двух таблиц. Записи внвчале
              сортируются.
MERGE JOIN    Объединение, выполняемое при слиянии двух сортированных
                наборов операндов. Эта операция имеет опции, которые показаны
                далее.
MINUS   Выбор записей в исходной таблице 1, несодержащихся в таблице
                2.
NESTED LOOPS  Объединенная операция, выполняемая над двумя
              подчиненными операциями. Для каждой записи,
              получаемой при первой подчиненной операции,
              выполняется вторая подчиненная операция. Эта
              операция имеет опции, которые показаны далее.
              Смотри таблицу 7-2.
PROJECTION    Выборка подмножества полей из таблицы.

REMOTE        Выбор из другой базы данных, отличной от текущей.

SEQUENCE      Операция вызова генератора последовательности.

SORT          Выбор записей, расположенных в одном или более
              полях. Эта операция имеет опции, которые показаны
              далее. Смотри таблицу 7-2.
TABLE ACCESS  Выбор из базовой таблицы. Эта операция имеет опции,
              которые показаны далее. Смотри таблицу 7-2.
UNION         Выбор уникальных записей из двух таблиц. Дубликаты
              теряются.
VIEW          Выбор из виртуальной таблицы.

                            

                             Операторы, имеющие опции.
--------------------------------------
Операторы                    Опции                                   Описания
--------------------------------------------------------------------
INDEX            UNIQUE SCAN                     Индекс ищет уникальную величину.
                         RABGE SCAN                      Индекс ищет диапазон значений,
                                                                        выбранный с помощью BETWEEN
                                                                        логического оператора.

MERGE JOIN       OUTER                            Внешнее объединение.

NESTED LOOPS     OUTER                        Внешнее объединение.

SORT                     UNIQUE                  Сортировка для получения уникальных
                                                                  значений.
                 GROUP BY                             Сортировка для групповых операций.
                 JOIN                                        Сортировка для объединения.
                 ORDER BY                             Сортировка в определенном порядке.

TABLE ACCESS     BY ROWID             Доступ к таблице по ROWID. ROWID
                                                                   выбирается из индекса,затем запись
                                                                   ищется в таблице.
                 FULL                                       Доступ к таблице при полном
                                                                  сканировании.
                 CLUSTER                               Доступ к таблице по кластерному ключу
2.2. Использование автотрассировки
Синтаксис:
SET AUTOT[RACE] {ON|OFF|TRACE[ONLY]} [EXP[LAIN]] [STAT[ISTICS]]
Пример:
set autot traceonly
SQL> insert into nya (num,name) values (3,'lyakamanya')
  2  /
1 row created.

Execution Plan
----------------------------------------------------------
--------------------------------------------------------------------------------
-
| Id  | Operation                | Name | Rows  | Bytes | Cost (%CPU)| Time
|
--------------------------------------------------------------------------------
-
|   0 | INSERT STATEMENT         |      |     1 |   100 |     1   (0)| 00:00:01
|
|   1 |  LOAD TABLE CONVENTIONAL | NYA  |       |       |            |
|
--------------------------------------------------------------------------------
-

Statistics
----------------------------------------------------------
          1  recursive calls
          1  db block gets
          1  consistent gets
          0  physical reads
        296  redo size
        678  bytes sent via SQL*Net to client
        622  bytes received via SQL*Net from client
          3  SQL*Net roundtrips to/from client
          1  sorts (memory)
          0  sorts (disk)
          1  rows processed
SQL> select * from nya order by num
  2  /

Execution Plan
----------------------------------------------------------
Plan hash value: 1565068852
---------------------------------------------------------------------------
| Id  | Operation          | Name | Rows  | Bytes | Cost (%CPU)| Time     |
---------------------------------------------------------------------------
|   0 | SELECT STATEMENT   |      |     4 |   100 |     3  (34)| 00:00:01 |
|   1 |  SORT ORDER BY     |      |     4 |   100 |     3  (34)| 00:00:01 |
|   2 |   TABLE ACCESS FULL| NYA  |     4 |   100 |     2   (0)| 00:00:01 |
---------------------------------------------------------------------------
Note
-----
   - dynamic sampling used for this statement (level=2)

Statistics
----------------------------------------------------------
          5  recursive calls
          0  db block gets
          7  consistent gets
          0  physical reads
          0  redo size
        570  bytes sent via SQL*Net to client
        419  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          1  sorts (memory)
          0  sorts (disk)
          4  rows processed

Переработка этой статьи и этой

 

Комментариев нет:

Отправить комментарий