асть 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.
< Предыдущая | Следующая > |
---|