Если трассировка SQL уровня 4 или 12 активна в тот момент, когда ядро Oracle связывает значения с заполнителями в SQL-тексте приложения, то ядро выводит в файл трассировки секцию BINDS. Например:
Секция BINDS может включать в себя одну или несколько подсекций связывания, по одной для каждой связываемой переменной. Номер, следующий за словом «bind», указывает позицию (порядковый номер, начиная с 0) переменной связывания в тексте SQL. Каждая секция связывания содержит различные характеристики связывания, наиболее важными из которых для анализа производительности являются следующие:
dty
Внешний тип данных значения, переданного приложением [Oracle OCI (1999)]. В Oracle определены два набора типов данных: внутренний и внешний. Определения внутреннего типа данных показывают, каким образом ядро Oracle хранит свои данные в операционной системе, а определения внешнего типа - каким образом ядро Oracle взаимодействует с SQL-кодом приложения.
Внешний тип данных переменной связывания весьма важен. Время от времени встречаются команды SQL, для которых оптимизатор запросов Oracle отказывается использовать индекс, безусловно, помогающий делу. Иногда это вызвано несоответствием типа столбца типу значения, что может привести к выполнению для столбца функции неявного приведения типа, что не позволит оптимизатору выбрать данный индекс.
avl
Длина связываемого значения (в байтах).
value
Значение, которое передается в выполняемую команду. Ядро Oracle может усекать значения, передаваемые в файл трассировки. Понять, что это произошло, несложно - усечение будет иметь место всегда, когда значение avl превышает длину поля value.
Если значение value не попало в файл трассировки, значит, переменная-заполнитель была связана со значением NULL. Так, в приведенном выше примере fndprofile. get_specific отсутствие поля value в секции bind 4 говорит о том, что приложение передало NULL в качестве значения заполнителя :val. Это подтверждается нулевой длиной (avl=00) значения переменной связывания.
Если в момент закрытия курсора включена трассировка SQL уровня 1, то ядро Oracle передает в файл трассировки по одной строке STAT для
Если в файле трассировки не оказывается ожидаемых строк STAT, значит, трассировка была отключена до закрытия курсора. Естественно, строки STAT будут отсутствовать при трассировке хорошо спроектированного постоянно работающего сервиса, который закрывает свои курсоры не чаще одного раза в несколько недель.
Каждая строка STAT содержит следующие данные о плане выполнения курсора:
id
Уникальный идентификатор операции над источником строк внутри множества строк STAT.
cnt
Количество строк, возвращенных данной операцией над источником строк.
pid
Идентификатор операции, родительской по отношению к данной.
pos
Произвольное число - ничего лучше не придумать. Можно предположить, что это значение могло бы определять «позицию» операции над источником данных во множестве операций, принадлежащих одному родителю, но похоже, что сестринские операции над источником данных упорядочены по возрастанию идентификаторов.
obj
Идентификатор объекта для операции над источником строк, если операция выполняется над «базовым объектом».1 Такие операции над источником строк, как NESTED LOOPS, которые сами не обращаются к базовому объекту, имеют obj =0. (Дочерние операции для NESTED LOOPS обращаются к базовым объектам, но сама операция NESTED LOOPS над источником данных этого не делает.)
Имеется в виду, что некоторые операции обращаются к объектам базы данных - базовым объектам, а некоторые - только к результатам предшествующих операций. - Примеч. науч.ред.
op
Имя операции над источником данных. Начиная с версии Oracle 9.2.0.2.0, ядро передает дополнительную информацию в строки STAT [Rivenes (2003)]. Новая информация включает в себя ряд полезных характеристик для каждой операции над источником строк, а именно:
cr
Количество чтений в согласованном режиме.
r
Количество блоков Oracle, прочитанных вызовами чтения ОС.
w
Количество блоков Oracle, записанных вызовами записи ОС.
time
Фактическая длительность (в микросекундах).
Статистика для родительской операции над источником строк включает в себя статистики для ее потомков.
Утилита Oracle tkprof выдает ошибочные результаты гораздо чаще, чем можно было бы предположить, особенно при обработке строк STAT. Утилита имеет репутацию исключительно надежной, но лично я убежден в том, что единственная причина такой репутации состоит в том, что никто никогда не утруждал себя тем, чтобы перепроверить ее выходные данные. Невозможно определить, корректен ли вывод tkprof, не изучив необработанные данные трассировки. А большинство пользователей не хочет этим заниматься. Надеюсь, что эта книга убедит вас сделать над собой усилие.
Если трассировка SQL уровня 1 активна в момент выполнения фиксации или отката транзакции, то ядро Oracle при завершении вызова передает в файл трассировки строку XCTEND. Например:
XCTEND rlbk=0, rd_only=0
Каждая строка XCTEND содержит следующие сведения о работе, выполняемой в ходе фиксации или отката транзакции:
rlbk
Истина (1) - в том и только в том случае, если транзакция была откачена.
rd_only
Истина (1) - в том и только в том случае, если транзакция не изменила никаких данных в базе данных.
Обратите внимание, что маркер XCTEND не ссылается на идентификатор курсора. Это объясняется тем, что транзакция и участвующие в ней курсоры находятся в отношении «один-ко-многим».
Краткий справочник
Доступные в файле трассировки статистики, представляющие наибольший интерес при анализе производительности, собраны в табл. 5.2.
Ядро Oracle9i отображает временные характеристики трассировки SQL в микросекундах (1 цс = 0,000001 сек). В версиях Oracle 6, 7 и 8 временные значения выводятся в сантисекундах (1 сантисек = 0,01 сек). В табл. 5.3 приведен перечень единиц измерения, которые ядро Oracle использует для каждого вида временной статистики в данных расширенной трассировки SQL.
Таблица 5.3. Единицы измерения временных характеристик для файла трассировки в зависимости от версии Oracle
Версия Oracle
|
c
|
e
|
ela
|
tim
|
9
|
Цс
|
Цс
|
Цс
|
Цс
|
8
|
сс
|
сс
|
сс
|
сс
|
7
|
сс
|
сс
|
сантисек
|
сс
|
6
|
сс
|
сс
|
N/A
|
сс
|
В табл. 5.4 поясняется значение единиц измерения времени, с которыми вам придется имеет дело при анализе производительности Oracle.
Таблица 5.4. Единицы времени, обычно используемые аналитиками по компьютерной производительности
Название единицы
|
Сокращение
|
Продолжительность в секундах
|
||
Секунда
|
1 с
|
1
|
1E-0
|
1.
|
Сотая доля секунды (сантисекунда)
|
1 сс
|
1/100
|
1E-2
|
0.01
|
Миллисекунда
|
1 тс
|
1/1000
|
1E-3
|
0.001
|
Микросекунда
|
1 Цс
|
1/1000000
|
1E-6
|
0.000001
|
< Предыдущая | Следующая > |
---|