Программирование >>  Oracle 

1 ... 173 174 175 [ 176 ] 177 178 179 ... 469


Стратегии и средства настройки

C:\Documents and Settings\Thomas Kyte\Desktop>tkprof

Usage: tkprof tracefile outputfile [explains ] [tables ] [prints ] [insert= ] [sys= ] [sorts ] table=имя схемы.имя таблицы Используйте имя схемы.имя таблицы внесте с

опцией explains .

explain=пользователь/пароль Подключиться к ORACLE и выполнить EXPLAIN PLAIN.

print=количество aggregate=yesno iпsеrt=имя файла

Выдать только указанное количество операторов SQL.

этот файл операторы SQL и данные в операторах

sys=no

record=имя файла

sort=опции prscnt prscpu prsela prsdsk prsqry

prscu

prsmis

execnt

ехесри

exeela

exedsk

exeqry

execu

exerow

exemis

fchcnt

fchcpu

fchela fchdsk

fchqry

fchcu

fchrow userid

выполненных от

Выдать в INSERT.

He выдавать информацию об операторах SQL, имени пользователя SYS.

Выдать сюда нерекурсивные операторы, имеющиеся трассировочном файле.

Набор из куля или более следующих опций: сколько раз выполнялся разбор процессорное время раэбора реальное время раэбора

количество чтений с диска в ходе разбора

количество буферов, прочитанных в режиме согласованного чтения ходе разбора

количество буферов, непосредственно прочитанных в ходе раэбора

количество непопаданий в библиотечный кэше в ходе разбора

сколько раз выполнялся оператор

процессорное время выполнения

реальное время выполнения

количество чтений с диска при выполнении

количество буферов, прочитанных в режиме согласованного чтения в ходе выполнения

количество буферов, непосредственно прочитанных при выполнении количество обработанных при выполнении строк

количество непопаданий в библиотечный кэш в ходе выполнения сколько раз выполнялось извлечение данных процессорное время извлечения данных реальное время извлечения данных

количество обращений к диску при извлечении данных

количество буферов, прочитанных в режиме согласованного чтения при извлечении данных

количество буферов, непосредственно прочитанных при извлечении данных

количество извлеченных строк

идентификатор пользователя, разобравшего оператор

Наиболее полезной, по моему мнению, является опция sort=. Я люблю сортировать результаты по разным показателям процессорного и реального времени выполнения, чтобы наихудшие запросы оказывались в начале трассировочного файла. Сортировку можно также использовать для поиска запросов, выполняющих слишком много физическо-

Описания параметров переведены на русский язык. Для получения исходных описаний на английском в1полните команду tkprof. Прим. научн. ред.



Глава 10

го ввода/вывода и т.д. Назначение остальных опций очевидно. В 99,9 процентах случаев я использую tkprof имя трассировочного файла имя файла отчета, и ничего более. При этом операторы SQL выдаются примерно в том порядке, как они посылались серверу в ходе выполнения. Я могу использовать утилиту типа grep в ОС UNIX или find в Windows для извлечения суммарных (total) строк, что позволяет легко определить, на какие запросы надо обратить внимание. Например, обработав полученный ранее файл report.txt:

total

C:\oracle\ADMIN\tkyte816\udump>d

report.txt

REPORT.TXT

total

0.00

0.00

total

0.01

0.02

total

1.20

1.21

86091

total

0.01

0.01

total

0.00

0.00

total

1.21

1.23

86092

total

0.01

0.01

можно понять, что для ускорения процесса надо в текстовом редакторе искать строку 1.21. Есть и другие операторы, но, очевидно, именно на этом надо сконцентрировать усилия для ускорения работы приложения.

Использование и интерпретация исходных трассировочных файлов

В СУБД Oracle есть два типа трассировочных файлов: генерируемые при установке SQLTRACE (их мы и рассматриваем) и генерируемые при сбое сеанса (в результате ошибки в СУБД). Трассировочные файлы второго типа, получаемые при сбое сеанса, непосредственно разработчикам не нужны - их посылают в службу поддержки Oracle Support для анализа. Трассировочные файлы первого типа разработчикам очень нужны, особенно если знать, как их читать и интерпретировать.

В большинстве случаев трассировочные файлы обрабатываются и форматируются утилитой TKPROF, но периодически необходимо изучать исходный трассировочный файл, чтобы получить больше информации о происходящем, чем выдает TKPROF. Допустим, имеется отчет TKPROF со следующей информацией:

UPDATE BMP SET ENAME=LOWER (ENAME) WHERE

EMPNO = :b1

call

count

elapsed disk

query

current

Parse Execute Fetch

0.00 0.00 0.00

0.00 54.25 0.00

17 0

total

0.00

54.25

rows



Стратегии и средства настройки 561

Проблема, очевидно, есть: на изменение одной строки уходит почти минута, хотя процессорного времени требуется менее сотой доли секунды. Итак, слишком долго пришлось ожидать какого-то события, но какого именно, утилита TKPROF не показывает. Кроме того, не мешало бы знать, при изменении какой строки это произошло (а именно: какое значение EMPNO было указано в переменной :Ь1). Эта информация поможет понять, как мы попали в подобную ситуацию. К счастью, трассировка приложения обеспечивалась следующей командой:

alter session set events 10046 trace name context forever, level 12;

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

scott@TKYTE816> alter session set events

2 10046 trace name context forever, level 12;

Session altered.

scott@TKYTE816> declare

2 l empno number default 7698;

3 begin

4 update emp set ename = lower(ename) where empno = l empno;

5 end;

PL/SQL procedure successfully completed. scott@TK:E816> exit

В этом случае мы точно знаем, какое значение EMPNO использовалось, но обычно это не известно. Ниже представлено содержимое трассировочного файла и соответствующие комментарии:

Dump file C:\oracle\admin\tkyte816\udump\ORA01156.TRC

Sat Mar 17 12:16:38 2001

ORACLE V8.1.6.0.0 - Production vsnsta=0

vsnsql=e vsnxtr=3

Windows 2000 Version 5.0 , CPU type 586

0racle8i Enterprise Edition Release 8.1.6.0.0 - Production

With the Partitioning option

JServer Release 8.1.6.0.0 - Production Windows 2000 Version 5.0 , CPU type 586 Instance name: tkyte816

Redo thread mounted by this instance: 1 Oracle process number: 11

Windows thread id: 1156, image: ORACLE.EXE

Это стандартный заголовок трассировочного файла. Он пригодится для определения точной версии системы и СУБД, с которой работает приложение. В заголовке также имеется идентификатор Oracle SID (имя экземпляра), который позволяет понять, с тем ли трассировочным файлом мы работаем.



1 ... 173 174 175 [ 176 ] 177 178 179 ... 469

© 2006 - 2025 pmbk.ru. Генерация страницы: 0.01
При копировании материалов приветствуются ссылки.
Яндекс.Метрика