![]() |
|
Программирование >> Oracle
Стратегии и средства настройки 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
можно понять, что для ускорения процесса надо в текстовом редакторе искать строку 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 (имя экземпляра), который позволяет понять, с тем ли трассировочным файлом мы работаем.
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0.01
При копировании материалов приветствуются ссылки. |