Собираем все вместе
Сначала надо установить ряд параметров инициализации, чтобы на сервере можно было включить трассировку, но не включать ее сразу. Список этих параметров представлен на рис. 1.
Обязательные oracle_trace_enable = true oracle_trace_collection_name = **
Стандартные значения
oracle_trace_collection_size = 5242880 oracle_trace_collection_path = ?/otrace/admin/cdf oracle_trace_facility_path = ?/otrace/admin/fdf oracle_trace_facility_name = oracled
| |
|
Рисунок 1: Параметры инициализации, связанные с oracle_trace
Параметру oracle_trace_collection_name нужно явно задать пустое значение "", ибо его стандартное значение - "oracle", а если имя набора указано и трассировка включена, сервер Oracle выполняет трассироку на уровне экземпляра с момента запуска (ого!).
Параметр oracle_trace_collection_path задает каталог, в котором будут размещаться файлы. В каталоге oracle_trace_facility_path размещаются списки событий, которые можно трассировать (facility definition files - файлы определения средств, предоставляемые Oracle Corporation). Параметр oracle_trace_facility_name задает список событий, которые нас интересуют. Наконец, можно ограничить размер (в байтах) файла с трассировочной информацией, задав значение параметра oracle_trace_collection_size.
После запуска сервера можно начинать сбор трассировочной информации.
В этой статье я буду использовать только средства командной строки, хотя есть и альтернативный PL/SQL-интерфейс (пакет dbms_oracle_trace_agent - прим. переводчика), и даже графический интерфейс, если купить соответствующий модуль для Oracle Enterprise Manager. Мы будем использовать команду следующего вида:
otrccol start 1 otrace.cfg
Команда otrccol - основной интерфейс для oracle_trace. Есть и другие команды, но большинство их возможностей были добавлены в otrccol. Очевидно, что параметр start требует начать трассировку (а параметр stop - ее остановить). Значение "1" - произвольно выбранный идентификатор задания, а otrace.cfg - файл конфигурации. Пример файла конфигурации представлен на рис. 2.
<
Используется для сбора данных
col_name = jpl cdf_file = jpl dat_file = jpl fdf_file = waits.fdf max_cdf = -10485760 buffer_size = 1048576 regid = 1 192216243 7 92 5 d901
Используется для форматирования
username = otrace password = otrace service = d901 full_format = 1
|
|
Рисунок 2: Пример файла конфигурации
oracle_trace
Этот файл требует от сервера создать файл с набором данных по имени
jpl.dat, с файлом определения набора (collection definition file) по имени
jpl.cdf и идентификатором набора
jpl. Определение трассируемых средств находится в файле
waits.fdf (этот файле предоставляется корпорацией Oracle и содержит только события ожидания). Размер файла трассировки будет ограничен 10 Мбайтами, но он будет использоваться повторно, так что, всегда будет содержать 10 Мбайт последних данных. Перед сбросом данных в этот файл сервер Oracle будет накапливать их в буфере размером 1 Мбайт.
Возможность задать
regid - одна из наиболее мощных возможностей
oracle_trace. "Стандартное" значение этой строки содержит
'0 0' вместо моих
'7 92', и треубет, чтобы
oracle_trace трассировал весь экземпляр Oracle, который задается идентификатором
d901 в конце строки. Я же попросил трассировать только
средство номер 7 (события ожидания)
элемент 92 (ожидания
buffer busy waits).
При необходимости можно указывать в файле несколько строк
regid. Для первого набора экспериментов я использовал две строки
regid в файле конфигурации, задающие трассировку
'7 129' и
'7 130' - последовательные (sequential) и выборочные (scattered) чтения, соответственно, поскольку эти типы ожиданий легко сгенерировать.
Раздел, задающий особенности форматирования, я прокомментирую далее.
После того, как система поработает некоторое время, выполним:
otrccol stop 1 otrace.cfg otrccol format otrace.cfg
Первая команда останавливает трассировку, вторая - читает файл и сбрасывает данные в ряд таблиц Oracle.
Однако прежде чем вы сможете сформатировать набор, надо создать схему, в которой будут находиться таблицы, используемые при форматировании. В качестве имени и пароля пользователя мы используем значения, представленные ранее на рис. 2. Строка
full_format=1
в файле конфигурации приводит к тому, что в таблицы будет сброшен весь файл; установка
full_format=0 приведет к сбросу только новых данных. Обратите внимание также на имя службы (
service) - оно задает базу данных, в которой находится соответствующая учетная запись. Чтобы использовать команду
format, надо запустить процесс прослушивания TNS (TNS listener), даже если данные сбрасываются в локальную базу.
На рис. 3 представлен небольшой сценарий, создающий учетную запись и предоставляющий ей необходимые привилегии.
create user otrace identified by otrace default tablespace users -- если не используется 9i: -- temporary tablespace temp quota 100m on users;
grant create session to otrace; grant create table to otrace; grant create sequence to otrace; grant create synonym to otrace;
|
|
Рисунок 3: Создание пользователя, в схеме которого будут находиться таблицы трассировки
При указании опции
format программа автоматически (по крайней мере, в новых версиях Oracle) создаст необходимые таблицы в указанной схеме. Часть этих таблиц бцдет иметь вполне осмысленные имена, например:
EPC_COLLECTION
Имена других будут лишены всякого смысла:
V_192216243_F_5_E_9_9_0
Проблему с неудобными именами можно решить, запусив сценарий
otrcsyn.sql в каталоге
$ORACLE_HOME/otrace/demo.
Этот сценарий создает синонимы для таблиц, давая им осмысленные имена, например:
WAIT CONNECTION
(Имена отличаются в разных версиях Oracle.)
Я обнаружил небольшую проблему с автоматической генерацией таблиц. Если указать один из очень избирательных списков средств (например,
waits.fdf), создаются только таблицы, необходимые для представления соответствующих результатов при форматировании. Если затем вы решите использовать более полный список трассируемых средств (например,
oracle.fdf) при форматировании произойдет сбой, поскольку часть таблиц есть, а других - нет. Так что, может иметь смысл поработать несколько секунд, трассируя
oracle.fdf, сформатировать данные, а затем выбросить (truncate) данные из всех таблиц. Это грубый, но эффективный метод настройки соответствующей схемы.
Содержание раздела