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

 

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

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

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


db2 (cont.) => FROM USER_NAME.EXPLAIN_OPERATOR O

db2 (cont.) => LEFT OUTER JOIW USER_NAME.EXPLAIN_STREAM S2

db2 (cont.) => ON 0.0perator_ID-S2.Source_ID

db2 (cont.) => LEFT OUTER JOIN USER_NAME.EXPLAIN_STREAM S

db2 (cont.) => ON O.Operator_ID = S.Target_ID

db2 (cont.) => AND O.Explain_Time = S. ExplainJTi me

db2 (cont.) => AND S. ObjectJJame IS NOT NULL

db2 (cont.) => ORDER BY 0.ExplainJTime ASC. Operator_ID ASC:

OPERATOR ID TARGET ID OPERATOR TYPE OBJECT NAME COST

1 - RETURN - 186

2 I TBSCAN - 186

3 2 SORT - 186

4 3 FETCH EMPLOYEES 186

5 4 IXSCAN EMP_MGR_ID 25

5 record(s) selected.

db2 => ROLLBACK:

DB20000I The SQL command completed successfully. db2 =>

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

Шаги для запроса в такой форме пронумерованы в столбце 0PERAT0R_ID. Этот запрос позволяет выполнять проход древовидного плана по столбцу TARGET_ID. TARGET_ID указывает на шаг, являющийся родительским для данной итерации. В нашем примере у каждого предка есть единственный потомок, но в общем случае множество шагов, таких как шаги вложенных циклов, являются родительскими для пары следующих шагов. При помощи TARGET_ID можно составить древовидную структуру, соответствующую плану выполнения. Прочие способы отображения планов выполнения в DB2 напрямую выводят ту же древовидную структуру, но ее сложно будет увидеть на экране полностью.

Такой же тип древовидной структуры отображается при помощи отступов в планах выполнения для предыдущего запроса, который я использовал для иллюстрации планов выполнения Oracle, но в них использовалась фраза CONNECT BY, которой нет в DB2. SQL Server также использует отступы для отображения древовидной структуры плана выполнения, например в планах, показанных при помощи SH0WPLAN_TEXT (см. далее).
Чтение планов выполнения в DB2

81

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

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

-- File called head.sql

DELETE FROM User Name.EXPLAIN_INSTANCE:

EXPLAIN PLAN FOR-

-- File called tail.sql

SELECT O.OperatorJD. S2.TargetJD. 0.OperatorJype.

S.ObjectJlame. CAST(0.Total Cost AS INTEGER) Cost FROM UserJIame. EXPLAINJ5PERAT0R 0 “

LEFT OUTER JOIN UserJlame.EXPLAINJiTREAM S2 ON 0.OperatorJD=S2.SourceJD LEFT OUTER JOIN UserJIame. EXPLAIN_STREAM S

ON O.OperatorJD = S.TargetJD AND O.ExplainJTime = S.Explain_Time AND S.ObjectJIame IS NOT NULL ORDER BY O.Explain_Time ASC. OperatorJD ASC:

ROLLBACK:

С помощью файлов head.sql и tail .sql процесс отображения планов выполнения после того, как вы выбрали нужный план (см. главы 5-7), становится достаточно простым.

1. Поместите чистый SQL-код для анализа в файл tmp. sql, который находится в том же каталоге, что и head .sql и tai I. sql.

2. В сеансе DB2, запущенном из того же каталога, выполните команду qui t:, чтобы выйти в строку приглашения оболочки, затем выполните команду cat head. sql tmp.sql tai I. sql |db2+c+p-t.

3. Настройте базу данных (например, изменив индексы) и рассматриваемый SQL код в файле tmp.sql (следуя методам, описанным в главе 4) и повторяйте предыдущий шаг в строке приглашения оболочки, пока не будет получен желаемый план выполнения. Затем запишите правильный результат где-либо для постоянного хранения.

Редактируйте рассматриваемый SQL-код (вместе с завершающим символом точки с запятой (;)) в файле tmp.sql в любом текстовом редакторе в одном окне. В другом окне запустите сеанс DB2 из каталога, где находятся head.sql, tail .sql и tmp. sql. Затем выйдите из обработчика командной строки DB2 командой qui t, но останьтесь в строке приглашения оболочки. Создавайте и просматривайте новые планы выполнения для текущей версии tmp. sql (после того, как сохраните файл!) следующей командой: cat head.sql tmp.sql tail.sql | db2 +c +p -t

Воспользуйтесь комбинацией клавиш для быстрого вызова, чтобы повторно вызывать эту команду по мере необходимости. Теперь для того, чтобы внести изменения в SQL-запрос и увидеть результаты, потребуется лишь несколько секунд. Если вы хотите распечатать план выполнения или просмотреть его в текстовом редакторе, можно перенаправить вывод: cat head.sql tmp.sql tail.sql | db2 +c +p -t > tmp.out
Предыдущая << 1 .. 34 35 36 37 38 39 < 40 > 41 42 43 44 45 46 .. 161 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100