DeepEdit!

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

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

Как отслеживать SQL?

Трассировку операторов SQL можно сравнить с отслеживанием или перехва­том телефонных звонков подозреваемого. Это делается не только для того что­бы узнать все подробности переговоров, но и определить источник или место происхождения звонков, а заодно вычислить сообщников преступника.
Замечание
Важно отметить, что для повышения качества информации, собираемой утилитой трассировки, необходимо, чтобы приложение выполнялось со значимыми и релевантными данными. Если данные (полученные из результатов работы других приложений или смоделированные) нереалистичны, то настолько же нереалистичными будут и результаты трассировки. Кроме того, если предстоит работать со стоимостным оптимизатором, убедитесь в достоверности используемой статистики. Когда последний раз проводился анализ таблиц и индексов? Как много данных было с тех пор добавлено в таблицы? Допустимо ли после всего этого сегодня использовать старую статистику? Далее удостоверьтесь в том, что все релевантные (т. е. имеющие влияние на исследуемую ситуацию) параметры файла init.ora установлены должным образом. Если ваш Oracle конфигурирован в режиме MTS, выясните, выполнено ли текущее подключение (для трассировки SQL) в выделенном режиме, чтобы выход трассировки не был раскидан по различным файлам.

Трассировку операторов SQL можно делать несколькими способами. Обыч­но используется установка параметра SQL_TRACE на уровне сеанса. Но прежде чем начать трассировку операторов SQL, необходимо установить или модифи­цировать (если необходимо) следующие параметры инициализации Oracle:
•        USER_DUMP_DEST =<$ORACLE_ADMIN>/<$ORACLE _SID>/udump
Применяйте для соответствия OFA эти установки. Данный параметр не мо­жет быть изменен динамически, для любого его преобразования потребуется перестартовать базу данных. Проверьте текущее значение этого параметра, чтобы определить, где размещены ваши файлы трассировки.
•        TIMED_STATISTICS   TRUE
Лучше установить его постоянно в файле init.ora, если только используемая версия Oracle не страдает от каких-либо 

недокументированных возможностей, 

свя­занных с постоянной установкой данных параметров. Как всегда, перед моди­фикацией любых параметров инициализации нужно определить, не зарегистрированы ли для применяемой версии Oracle какие-то ошибки, связан­ные с этими параметрами. Параметр TIMEDSTATISTICS можно изменить ди­намически, выдав команду alter system или alter session для его установки на уровне системы или сеанса, а впоследствии выключив его. Это спасительный если у системы есть проблемы с установкой постоянного значения TIMEDSTATISTICS в файле init.ora.
•        MAX_DUMP_FILE_SIZE = 1024
Параметр определяет максимальный размер файлов трассировки для вашей системы. Если для трассировки вам потребуются большие файлы, можно моди­фицировать этот параметр на уровне сеанса, используя команду alter session и устанавливая его равным UNLIMITED, чтобы избежать риска возможного пере­полнения файла трассировки.

Предупреждение
Нельзя устанавливать SQLTRACE=TRUE в файле init.ora, так как будет трассироваться каждый оператор SQL. Это вызовет заметные задержки при выполнении и, кроме того, будет засорять файловую систему в том месте, на которое указывает параметр USER_DUMP_DEST, скорее всего бесполезными файлами трассировки. Мы рекомендуем сохранить установку (по умолчанию) этого параметра в файле init.ora на FALSE. Установка же его в TRU E должн а быть использована в качестве последнего шанса, когда вы окончательно убедитесь, что его не удается установить в TRUE из среды вашего приложения или любого другого сеанса.
Чтобы включить трассировку из текущего сеанса, можно выполнить следую­щие команды:
SQL*Plus: Release 8.1.5.0.0 - Production on Fri Nov 10 20:57:18 2000 (c) Copyright 1999 Oracle Corporation. All rights reserved. Connected to:
0racle8i Enterprise Edition Release 8.1.5.0.0 - Production With the Partitioning and Java options PL/SQL Release 8.1.5.0.0 - Production
SQL> alter session set timed_statistics=true /* Optional - Only if setting at the instance level permanently causes problems */; Session altered.
SQL> alter session sql_trace=true; Session altered.
SQL> /.Execute your SQL statements */
SQL> alter session set timed_statistics=false /* Only if it were set to true in the current session */;
Session altered.
SQL> alter session set sql_trace=false; . Session altered.
В версиях Oracle до 7.2 возникали проблемы с применением данного метода. Это было связано с тем, что для отключения опции SQL_TRACE приходилось ждать, пока закончатся все выполнявшиеся в данный момент операторы SQL. Однако в Oracle 7.2 и более поздних версиях появилась возможность отключать трассировку из другого сеанса. Рекомендуемый метод отключения трассировки
состоит в том, чтобы установить        на FALSE из этого или из другого
сеанса. Нельзя отключить трассировку, просто "убив" сеанс. Такое отключение может привести к тому, что содержимое файла трассировки будет обрезано, ли­бо в нем запишется неверная информация.
Следующий метод иллюстрирует, как включить трассировку из сеанса како­го-либо пользователя. Это бывает особенно полезно, когда имеются проблемы с производительностью для приложения, которое может поддерживать, а может и не поддерживать внутри опцию SQL_TRA.CE. Более того, данный метод также позволяет по желанию включать и выключать трассировку, не дожидаясь, пока закончится выполняющееся задание. Если необходимо, установите TIMED_ STATISTICS на TRUE таким образом:
J  SQbPlus: Release 8.1.5.0.0 - Production on Fri Nov 10 21:10:38 2000 (c) Copyright 1999 Oracle Corporation. All rights reserved.
Connected to:
0racle8i Enterprise Edition Release 8.1.5.0.0 - Production
With  the  Partitioning and Java  options PP/SQP Release 8.1.5.0.0 - Production
SQL> select Sid,   Serial*
2        from V$SESSI0N
3        where Username =  'BENCHMARK'  /* Determine the SID,  SERIAL# of the
session that you are trying to trace from v$session /;

SID
SERIAL#

11
54
SQL> execute dbms_system. set_sql_trace._in_session(' 11', '54',TRUE): PL/SQL procedure successfully completed.
SQL> /* Wait for SQL statements to execute for a certain period */ SQP> execute dbms_system.set_sql_trace_in_session(' 11', '54',FALSE);
PL/SQL procedure successfully completed.


Очень важно
Поскольку ядром книги является настройка на базе событий ожидания, следует заметить, что запись событий ожидания для задания в файл трассировки с последующим их изучением является мощным средством диагностики       главу "Метод,
стоящий за безумием").
 


г Дмитров квартиры, выгодно . крыша, багажники боксы на крышу авто.







jAntivirus