Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Программисту -> Тоу Д. -> "Настройка SQL. Для профессионалов" -> 34

Настройка SQL. Для профессионалов - Тоу Д.

Тоу Д. Настройка SQL. Для профессионалов — СПб.: Питер, 2004. — 333 c.
ISBN 5-94723-959-0
Скачать (прямая ссылка): nastroykasqldlyaprof2004.djvu
Предыдущая << 1 .. 28 29 30 31 32 33 < 34 > 35 36 37 38 39 40 .. 161 >> Следующая


1. Удалите все строки из специальной таблицы Oracle для планов выполнения PLAN TABLE в схеме, которую вы используете для создания планов выполнения. Создать план выполнения для оператора SQL можно только под именем пользователя, у которого есть права выполнять операторы SQL. Таким образом, обыч-
68

3. Просмотр и интерпретация планов выполнения

но вы создаете планы выполнения, когда подключены к той же схеме, в которой выполняется предназначенный для настройки SQL.

ВНИМАНИЕ -------------------------------------------------------------------------

Иногда очень привлекательно выглядит идея создать пользователей и схемы базы данных специально для проведения анализа и создания планов выполнения и назначить пользователям достаточно прав, чтобы они могли исполнять настраиваемый SQL-код. Ho такой подход следует применять с большой осторожностью, поскольку специальные схемы будут работать из собственного пространства имен (и, например, будут видеть различные варианты представлений). Когда вы подключаетесь как эти особые пользователи, база данных может интерпретировать данный запрос иначе, не так, как в бизнес-прило-жении, и потребует отдельного плана выполнения.

2. Создайте записи плана выполнения в PLAN TABLE при помощи оператора SQL EXPLAIN PLAN FOR ^встраиваемый оператор>;.

3. Выведите на экран план выполнения при помощи подобного оператора:

SELECT LPADC '.2*(LEVEL-1))||OPERATION||' 'I|OPTIONS||1 ¦|| DECODE(OBJECTJNSTANCE. NULL. OBJECT_NAME.

T0_CHAR(OBJECT_INSTANCE)||'*'11 OBJECT_NAME) PLAN FROM PLANJTABLE START WITH ID=O

CONNECT BY PRIOR ID - PARENT_ID ORDER BY ID;

4. Очистите результаты вашей работы при помощи ROLLBACK:.

Выполним эту последовательность действий и проанализируем план выполнения для простого запроса:

SELECT Last_Name. FirstJtame. Salary FROM Employees

WHERE ManagerJ D=137

ORDER BY Last_Name. First_Name:

Далее вы видите реальное содержимое сеанса SQL*Plus для ручного определения плана выполнения нашего запроса:

SQL=» delete from plan_table;

0 rows deleted.

SQL> EXPLAIN PLAN FOR SELECT Last_Name, First_Name. Salary FROM Employees

2 WHERE ManagerJD=137

3 ORDER BY LastJIame. First_Name:

Explained.

SQL> SELECT LPAD(' ".2*(LEVEL-1))|!OPERATION!|' '||0PTI0NS|||I

2 DEC0DE(0BJECT_INSTANCE. NULL. 0BJECT_NAME.

3 T0_CHAR(0BJECT INSTANCE) || ¦*' 11 OBJECTJAME) PLAN

4 FROM PLANJABLE

5 START WITH 10=0

6 CONNECT BY PRIOR ID = PARENTJO

7 ORDER BY ID:

PLAN

SELECT STATEMENT SORT ORDER BY TABLE ACCESS BY INDEX ROWID !‘EMPLOYEES
Чтение планов выполнения в Oracle

69

INDEX RANGE SCAN EMPLOYEES_MANAGER_ID

4 rows selected.

SQL> rollback:

Rollback complete.

Здесь показан план выполнения, который находит диапазон индекса (по индексу Employees_Manager_ID), включающий данные о сотрудниках, подчиненных менеджеру с идентификатором 137. Сканирование этого диапазона индекса (см. последнюю строку выхода перед отчетом "4 rows selected") приводит к получению списка идентификаторов строк, указывающих на определенные строки в определенных блоках таблицы Employees. Для каждого из этих идентификаторов строк Oracle выполняет операцию логического ввода-вывода и, если необходимо, физического ввода-вывода в соответствующем блоке таблицы, где и находит нужную указанную строку. После операций считывания из таблицы Oracle сортирует строки в порядке возрастания по столбцам, указанным после выражения ORDER BY.

Практический процесс отображения планов выполнения

Для новичка процесс отображения планов выполнения в Oracle выглядит неудобным, но вы можете автоматизировать основные шаги этого процесса, написав небольшой и простой сценарий. Если вы работаете в Unix, создайте следующие файлы:

-- File called head.sql: set pagesize 999 set feedback off

DELETE FROM PLANJABLE WHERE STATEMENT_ID = '<Your name>'.

EXPLAIN PLAN SET STATEMENTJD = '<Your name>’ FOR

-- FiIe called tail.sql:

SELECT LPADC ‘.2*(LEVEL-1)J||0PERATI0N||' ' ||0PTI0NS||' '||

DECODE(OBJECT_INSTANCE. NULL. OBJECT JIAME.

T0_CHAR(0BJECT_INSTANCE) | Г*' 11 OBJECTJWIE) PLAN

FROM PLANJABLE

START WITH ID=O AND STATEMENTJD = '<Your name>'

CONNECT BY PRIOR ID = PARENT ID AND STATEMENTJD = '<Your name>'

ORDER BY ID:

ROLLBACK:

-- File called ex.sql:

!cat head.sql tmp.sql tail.sql > tmp2.sql spool tmp.out @tmp2 spool off

После этого вы сможете последовательно обрабатывать планы выполнения. Сохраните рассматриваемый SQL-код (вместе с завершающей символом точки с запятой (;)) в файле tmp.sql в любом текстовом редакторе в одном окне. В другом окне запустите сеанс SQL*Plus из каталога, в котором находятся файлы head.sql, tail .sql, ex.sql и tmp.sql. Создавайте новые планы выполнения для текущей версии tmp. sql (после того, как сохраните этот файл!), вводя команду @ех в строке с при-
70

3. Просмотр и интерпретация планов выполнения

глашением SQL> в том окне, где выполняется сеанс утилиты SQL* Plus. Процесс анализа и просмотра планов выполнения можно описать достаточно детально.
Предыдущая << 1 .. 28 29 30 31 32 33 < 34 > 35 36 37 38 39 40 .. 161 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100