|
Программирование >> Oracle
Стратегии и средства настройки 547 ходе сеанса с одного разделяемого сервера на другой. При подключении в режиме MTS интерпретация результатов SQL TRACE практически невозможна. Еще один важный параметр в файле init.ora - MAX DUMP FILE SIZE. Он ограничивает максимальный размер генерируемого сервером трассировочного файла. Если обнаружится, что трассировочные файлы - усеченные, увеличьте значение этого параметра. Это можно сделать с помощью оператора ALTER SYSTEM или ALTER SESSION. Параметр MAX DUMP FILE SIZE можно задать тремя способами. Числовое значение параметра MAX DUMP FILE SIZE задает максимальный размер в блоках файловой системы. Число, за которым следует суффикс К или М, задает размер в килобайтах или ме- габайтах, соответственно. Строка UNLIMITED означает, что ограничения на размер трассировочных файлов нет - они могут иметь любой размер, допускаемый операционной системой. Я не рекомендую устанавливать значение UNLIMITED - так можно заполнить всю файловую систему; значения в диапазоне от 50 до 100 Мбайт обычно более чем достаточно. Как включить параметр SQL TRACE? Чаще всего я использую следующие способы. ALTER SESSION SET SQL TRACE=TRUEFALSE. Выполнение этого оператора SQL позволит включить стандартный режим трассировки SQL TRACE в текущем сеансе. Этот оператор наиболее полезен в интерактивной среде типа SQL*Plus или при встраивании в приложение, так чтобы из приложения можно было при необходимости включать и отключать трассировку. Возможность просто включать и отключать SQL TRACE средствами приложения - будь-то опция командной строки, пункт меню или параметр конфигурации - полезна в любом приложении. SYS.DBMS SYSTEM.SET SQL TRACE IN SESSION. Эта процедура позволяет устанавливать и сбрасывать трассировку для любого существующего сеанса. Для этого необходимо указать лишь параметры SID и SERIAL# соответствующего сеанса - их можно получить из представления динамической производительности V$SESSION. ALTER SESSION SET EVENTS. Можно установить событие, обеспечивающее трассировку с большим объемом регистрируемой информации, чем обычно получается при установке ALTER SESSION SET SQL TRACE=TRUE. Прием с использованием SET EVENTS не описан в документации и не поддерживается Oracle Corporation, но его существование общеизвестно (обратитесь на сайт http: www.google.com/ и поищите по запросу alter session set events 10046: вы увидите, на скольких сайтах эта возможность описана). С помощью этого события можно не только получить всю информацию, выдаваемую при установке SQLTRACE, но и значения связываемых переменных в SQL-операторах, а также информацию о том, какие события ожидаются (что замедляет работу) при выполнении этих SQL-операторов. 548 Глава 10 Есть и другие методы, но именно эти три чаще всего я встречаю и использую сам. Методы установки SQL TRACE оператором ALTER SESSION SET SQL TRACE и вызовом SYS.DBMS SYSTEM - очень просты и очевидны. Использование события несколько менее тривиально. При этом используется внутренний (и не отраженный в документации) механизм событий сервера Oracle. Если коротко, используются следующие команды: alter session set events 10046 trace name context forever, level <N>; alter session set events 10046 trace name context off; где N может иметь одно из следующих значений: N=1. Включает стандартные средства SQL TRACE. Результат не отличается от установки SQL TRACE=true. N=4. Включает стандартные средства SQL TRACE и добавляет в трассировочный файл значения связываемых переменных. N=8. Включает стандартные средства SQL TRACE и добавляет в трассировочный файл информацию об ожидании событий на уровне запросов. N=12. Включает стандартные средства SQL TRACE и добавляет как значения связываемых переменных, так и информацию об ожидании событий. Использование средств пакета DBMS SUPPORT - еще один метод установки трассировки с отображением значений связываемых переменных и информации об ожиданиях событий. Для получения пакета DBMS SUPPORT надо связаться со службой поддержки Oracle Support, поскольку он не входит в обычно поставляемый набор инструментальных средств. Так как это всего лишь интерфейс к представленной выше команде ALTER SYSTEM SET EVENTS, ее использование может оказаться проще. Теперь, когда известно, как включить SQL TRACE, возникает вопрос, как это средство лучше использовать? Лично я предпочитаю добавлять в свои приложения опцию, которую можно задать в командной строке или в адресе URL (если это Web-приложе-ние), для включения трассировки. Это позволяет получать информацию SQL TRACE для одного сеанса. Многие средства разработки Oracle тоже позволяют это сделать. Например, при использовании Oracle Forms, можно вызывать форму с параметром: С:\> ifrun60 module=myform userid=scott/tiger statistics=yes STATISTICS=YES - это флаг, требующий выполнить команду ALTER SESSION SET SQL TRACE=TRUE. Если бы подобные средства предоставляли все приложения, их настройка упростилась бы. Можно было бы попросить пользователя, столкнувшегося с проблемой производительности, включить трассировку и затем воспроизвести проблему. В результате можно получить всю информацию, необходимую для выяснения причин медленной работы. Не придется спрашивать, что именно делается, чтобы воспроизвести проблему самостоятельно, - достаточно будет попросить ее воспроизвести и затем проанализировать результаты трассировки. Если в трассировочном файле имеются значения связываемых переменных и информация об ожидавшихся событиях, то данных более чем достаточно для выяснения того, что же работает не так. Стратегии и средства настройки 549 Как обеспечить трассировку, если приходится работать с приложением стороннего производителя или с существующим приложением, не поддерживающим включение SQL TRACE? Я использую два подхода. Один из них подходит для клиент-серверного приложения, постоянно подключенного к базе данных. Достаточно запустить приложение и подключиться к базе данных. Затем, выполнив запрос к представлению V$SESSION, можно определить параметры SID и SERIAL# соответствующего сеанса. Теперь можно вызвать SYS.DBMS SYSTEM.SET SQL TRACE IN SESSION для включения трассировки указанного сеанса. Сегодня, однако, популярны Web-приложения, для которых этот метод не подходит. Сеансы при этом очень короткие, и они часто начинаются и завершаются. Необходимо установить средство SQL TRACE для пользователя - при каждом подключении этого пользователя необходимо устанавливать SQLTRACE для соответствующего сеанса. К счастью, это можно сделать с помощью триггера базы данных на событие LOGON. Например, в Oracle 8i я часто использую следующий триггер (триггеры на события базы данных, такие как AFTER LOGON, - новое средство, поддерживаемое в Oracle 8.1.5 и последующих версиях): create or replace trigger logon trigger after logon on database begin if (user = TKYTE) then execute immediate ALTER SESSION SET EVENTS 10046 TRACE NAME CONTEXT FOREVER, LEVEL 4 ; end if; end;/ Он обеспечивает включение трассировки при каждом подключении к базе данных. Приложение не надо менять для установки SQLTRACE - мы это сделаем сами. Использование и интерпретация результатов работы утилиты TKPROF TKPROF - это средство командной строки для преобразования трассировочного файла в более удобочитаемый вид. Это прекрасная утилита, к сожалению, недостаточно часто используемая. Я считаю, что это связано с тем, что о ее существовании просто не знают. Теперь, когда вы о ней знаете, я думаю, вы будете использовать ее постоянно. В этом разделе я выполню запрос с включенной трассировкой. Затем мы детально рассмотрим соответствующий отчет TKPROF и выясним, на что надо обращать внимание в подобных отчетах: tkyte@TKYTE816> show parameter timed statistics; NAME TYPE VALUE timed statistics boolean TRUE tkyte@TKYTE816> alter session set sql trace=true;
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |