DeepEdit!

Программирование баз данных на Oracle, техническая документация, литература, статьи и публикации

  • Увеличить размер шрифта
  • Размер шрифта по умолчанию
  • Уменьшить размер шрифта

Переменные связывания


Если трассировка 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 отсутствие поля val­ue в секции 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.
Единицы времени Oracle
Ядро Oracle9отображает временные характеристики трассировки 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

 









jAntivirus