DeepEdit!

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

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

Часть II. Справочная информация. Интерпретация данных расширенной трассировки SQL

асть II. Справочная информация. 

Интерпретация данных расширенной трассировки SQL


Д л я того чтобы стать хорошим аналитиком по производительности, не­обходимо понимать тот язык, на котором система сообщает о своей про­изводительности. К сожалению, в течение более десяти лет временная статистика Oracle относилась к наиболее недооцененным и недопоня­тым областям ядра Oracle. Для того чтобы научиться обращаться с ин­струментами анализа времени отклика, предлагаемыми ядром Oracle, надо понять, каким образом ядро Oracle взаимодействует с операцион­ной системой. Речь идет об операционной системе, которая выделяет ресурсы для процесса ядра Oracle, именно она и предоставляет ту вре­менную статистику, которую Oracle использует для описания собст­венной производительности.

З накомство с файлом трассировки

Мне кажется, что лучше всего начать изучение данных о функциони­ровании Oracle с содержимого файлов расширенной трассировки SQL. Данные о трассировке SQL предоставляют непревзойденный учебный и диагностический материал, т. к. представляют собой последователь­но записанную историю действий ядра Oracle, предпринятых в ответ на запросы приложения к базе данных.
Функция трассировки SQL входит в состав ядра Oracle начиная с вер­сии 6, которая наверняка старее любой из используемых вами версий. В 1992 году, с выпуском версии 7.0.12, корпорация Oracle значитель­но усовершенствовала трассировку SQL, дополнив ее информацией о продолжительности не потребляющих времени процессора инструк­ций, выполняемых ядром Oracle.
Начнем наше изучение данных о времени отклика с запроса «Hello, world». В примере 5.1 приведен один из простейших сеансов SQL*Plus, который можно себе представить. Сеанс активирует для себя меха­низм расширенной трассировки SQL. Затем он запрашивает из базы данных строку «Hello, world; today is sysdate» и завершается.
Пример 5.1. Сценарий сеанса SQL*Plus, генерирующего данные расширенной трассировки SQL для простого запроса
Файл трассировки из примера 5.1 приводит последовательность дейст­вий, выполненных ядром Oracle от имени данного сеанса. Если вы привыкли смотреть на данные трассировки SQL только через объектив утилиты tkprof, то вас ждет приятный сюрприз. Научившись обра­щаться с необработанными данными расширенной трассировки, вы сможете диагностировать большее количество типов ошибок произво­дительности, чем это позволяет tkprof. Многие аналитики, научив­шись свободно обращаться с необработанными данными трассировки, с удивлением обнаруживают множество недостатков в tkprof.
Такой маленький файл трассировки несложно пройти вручную. В кон­це главы я опишу каждую операцию, чтобы вы осознали, какого рода данные можно найти в файле трассировки. Пока же обратимся только к наиболее значимым пунктам.
В начале файла трассировки содержится преамбула - заголовок, вклю­чающий в себя сведения о файле: его имя, версию сформировавшего его ядра Oracle и т. д. Затем идет строка, в которой определен сеанс, для которого выполняется трассировка (в нашем случае - сеанс 7, по­рядковый номер 6692), и время появления данной строки. Обратите внимание, что ядро идентифицирует каждую команду SQL, исполь­зуемую сеансом, в секции PARSING IN CURSOR. В этой секции приводятся атрибуты используемого текста SQL, в том числе и сам текст.
Рабочие строки файла трассировки начинаются с лексем PARSE, EXEC и FETCH (а также некоторых других), также к ним относятся строки WAIT. Каждая из строк PARSE, EXEC и FETCH отражает выполнение одного вызова базы данных. Статистики c и e сообщают, сколько было потра­чено на данный вызов времени процессора и какова была общая про­должительность вызова соответственно. Другие статистические пока­затели, присутствующие в строке, представляют собой количество блоков Oracle, полученных системными вызовами чтения (p) или обра­щениями к кэшу буферов базы данных в двух режимах (cr для чтения в согласованном режиме и cu для чтения в текущем режиме), количе­ство непопаданий в библиотечный кэш (mis) и количество возвращен­ных вызовом строк (r). Значение tim в конце строки позволяет прибли­зительно оценить время, когда этот вызов был завершен.
Строки WAIT - это замечательное «новое» дополнение к файлам трасси­ровки Oracle (они доступны только начиная с 1992 года). Строки WAIT как раз и относятся к тому, что отличает данные расширенной трасси­ровки SQL от обычных старых трассировочных данных. Каждая строка WAIT сообщает о продолжительности определенной последовательности инструкций, выполняемой внутри процесса ядра Oracle. Статистика ela содержит время отклика такой последовательности инструкций. Атри­бут nam определяет вызов; значения p1, p2 и p3 предоставляют полезную информацию о вызове, формат которой зависит от значения nam.
Строки STAT не передавали непосредственной информации о времени отклика до версии 9.2. Однако и до выхода версии 9.2 они широко применялись при анализе производительности, т. к. содержали сведе­ния о плане выполнения, выбранном оптимизатором запросов Oracle для выполнения команд SQL. Наконец, строка XCTEND появляется в том случае, когда исследуемое приложение выполняет команду фиксации или отката.
Вот так. Все, что надо знать о времени отклика сеанса, есть в файле трассировки. Одно из главных достоинств этих данных состоит в том, что они показывают, что именно сеанс делал в ходе своего выполнения. Нет необходимости восстанавливать составляющие из агрегированных данных (чем приходится заниматься, например, при оценке данных V$). Все составляющие как на ладони, они расположены в хронологиче­ском порядке и хранятся в удобном для разбора формате ASCII.

 









jAntivirus