Трассировка сессии Oracle помогает найти проблемные запросы и понять в чем именно причина.
Что именно будет записываться в трассировочный файл, определяется номером события (event).
Стандартный номер события 10046. Именно такой уровень устанавливается при выполнении команды
alter session set sql_trace=true;
Список данных событий и для чего они предназначены можно посмотреть здесь EventReference
Событие трассировки 10046 / Trace event 10046
Включить трассировку в текущей сессии
alter session set events ‘10046 trace name context forever, level 1’;
выключить трассировку в текущей сессии
alter session set events ‘10046 trace name context off’;
- 0 — трассировка отключена
- 1 — стандартная трассировка
- 4 — добавлены значения связываемых (binds) переменных
- 8 — добавлены события ожидания (waits)
- 12 — связываемые переменные + события ожидания
Для включения трассировки в другой сессии можно воспользоваться командой
Программирование в PL/SQL (ORACLE) Урок 1 (часть 1 из 3) / Илья Хохлов
sys.dbms_system.set_ev(sid, serial#, 10046, 12, »);
Путь к директории, где появится файл трассировки
select value from v$parameter where name = ‘user_dump_dest’;
Задать имя для trace файла
alter session set tracefile_identifier = ‘mytrace1’;
Понимание трасировочного файла
Выполняем следующий код, чтобы создать trace файл:
SET SERVEROUTPUT ON alter session set tracefile_identifier = ‘mytrace2’ / alter session set events ‘10046 trace name context forever, level 12’ / declare l_row_num number; l_owner varchar2(10) := ‘SYS’; begin select count(1) into l_row_num from all_tables t where t.owner = l_owner; dbms_output.put_line(‘num=’||l_row_num); end; / alter session set events ‘10046 trace name context forever, level 0′ /
Trace file . /»instance_name»_ora_12591_mytrace2.trc Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 — 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options ORACLE_HOME = . System name: . Node name: . Release: . Version: . Machine: . Instance name: «instance_name» Redo thread mounted by this instance: 1 Oracle process number: 545 Unix process pid: 12591, image: . *** 2012-09-19 12:07:49.268 *** SESSION ID:(669.6321) 2012-09-19 12:07:49.268 *** CLIENT ID:() 2012-09-19 12:07:49.268 *** SERVICE NAME:(. ) 2012-09-19 12:07:49.268 *** MODULE NAME:(PL/SQL Developer) 2012-09-19 12:07:49.268 *** ACTION NAME:(Command Window — New) 2012-09-19 12:07:49.268
PARSING IN CURSOR #11529215044981500944 len=54 dep=1 uid=44 oct=3 lid=44 tim=10192202222475 hv=1751201178 ad=’c0000005d60dcaf0′ sqlid=’1f79yzdn62dcu’ SELECT COUNT(1) FROM ALL_TABLES T WHERE T.OWNER = :B1 END OF STMT
cинтаксис
PARSING IN CURSOR #[CURSOR] len=X dep=X uid=X oct=X lid=X tim=X hv=X ad=’X’ sqlid=’X’ [statement] END OF STMT
- [CURSOR] — номер курсора
- len — длина SQL запроса
- dep — рекурсивная глубина SQL запроса
- uid — id пользователя (user) под которым был разобран запрос
select * from all_users where user_id = :uid;
PARSE #11529215044981500944:c=0,e=370,p=0,cr=0,cu=0,mis=1,r=0,dep=1,og=1,plh=0,tim=10192202222474 EXEC #11529215044981500944:c=270000,e=276923,p=0,cr=3,cu=0,mis=1,r=0,dep=1,og=1,plh=242196440,tim=10192202499569 FETCH #11529215044981500944:c=840000,e=1466871,p=2776,cr=71124,cu=0,mis=0,r=1,dep=1,og=1,plh=242196440,tim=10192203966668
PARSE — разбор курсора, EXEC — выполнение курсора, FETCH — получение данных
Как читать план запроса Oracle (последовательность выполнения шагов)
cинтаксис
PARSE #[CURSOR]:c=X,e=X,p=X,cr=X,cu=X,mis=X,r=X,dep=X,og=X,plh=X,tim=X EXEC #[CURSOR]:c=X,e=X,p=X,cr=X,cu=X,mis=X,r=X,dep=X,og=X,plh=X,tim=X FETCH #[CURSOR]:c=X,e=X,p=X,cr=X,cu=X,mis=X,r=X,dep=X,og=X,plh=X,tim=X
- [CURSOR] — номер курсора
- c — время в микросекундах затраченное процессором
- e — общее затраченное время в микросекундах
- p — число физических чтений (physical reads)
- cr — количество блоков полученных в режиме согласованного чтения (retrieved for CR reads)
- cu — количество блоков полученных в текущем режиме (retrieved in current mode)
- mis — отсутствие курсора в кеше, выполняется hard parse
- r — количество возвращаемых строк
- dep — рекурсивная глубина запроса
- og — Цель оптимизатора: 1=All_Rows, 2=First_Rows, 3=Rule, 4=Choose
- plh — Hash значение для выполняемого плана. V$SQL_PLAN.PLAN_HASH_VALUE
- tim — timestamp, в микросекундах
Связываемые переменные / binds
BINDS #11529215044981500944: Bind#0 oacdty=01 mxl=32(10) mxlc=00 mal=00 scl=00 pre=00 oacflg=13 fl2=206001 frm=01 csi=171 siz=32 off=0 kxsbbbfp=9fffffffbf3b37b8 bln=32 avl=03 flg=09 value=»SYS»
- [CURSOR] — номер курсора
- bind#N — номер переменной
- oacdty — тип данных
- mxl- maximum length of the bind variable value (private maximum length in parentheses)
- mxlc — ?
- mal — длина массива
- scl — масштаб (scale)
- pre — точность (precision)
- oacflg — special flag indicating bind options
- fl2 — second part of oacflg
- frm — ?
- csi — идентификатор кодировки
- siz — объем выделяемой памяти
- off — offset into the chunk of the bind buffer
- kxsbbbfp — адрес переменной
- bln — длина буфера для переменной
- avl — актуальная длина переменной
- flg — статус переменной
- value- значение переменной
WAIT #11529215044981500944: nam=’Disk file operations I/O’ ela= 285 FileOperation=2 fileno=4 filetype=2 obj#=397424 tim=10192202526355 WAIT #11529215044981500944: nam=’db file sequential read’ ela= 583 file#=4 block#=7927 blocks=1 obj#=397424 tim=10192202526996
- [CURSOR] — номер курсора
- nam- тип ожидания
- ela — затраченное время в микросекундах
- obj#- номер объекта
- tim — timestamp, в микросекундах
Остальные параметры зависят от типа ожидания. Увидеть данные параметры можно с помощью запроса:
select * from v$event_name where name = :waitname;
STAT #11529215044981500944 cnt=1 pid=0 pos=1 obj=0 op=’SORT AGGREGATE (cr=71124 pr=2776 pw=0 time=1466915 us)’ STAT #11529215044981500944 cnt=1047 pid=1 pos=1 obj=0 op=’FILTER (cr=71124 pr=2776 pw=0 time=1123290 us)’ STAT #11529215044981500944 cnt=1047 pid=2 pos=1 obj=0 op=’NESTED LOOPS OUTER (cr=68261 pr=2735 pw=0 time=1080842 us cost=3024 size=14145 card=115)’ STAT #11529215044981500944 cnt=1047 pid=3 pos=1 obj=0 op=’HASH JOIN RIGHT OUTER (cr=64291 pr=2289 pw=0 time=954642 us cost=2820 size=11322 card=102)’ . STAT #11529215044981500944 cnt=28 pid=8 pos=1 obj=16 op=’TABLE ACCESS FULL TS$ (cr=33 pr=0 pw=0 time=1609 us cost=8 size=84 card=28)’ STAT #11529215044981500944 cnt=1047 pid=8 pos=2 obj=0 op=’NESTED LOOPS (cr=62544 pr=2252 pw=0 time=561698 us cost=2620 size=8976 card=102)’ .
- [CURSOR] — номер курсора
- id — номер строки плана
- cnt — количество обработанных строк
- pid — идентификатор родителя
- pos — позиция относительно родителя
- obj — ID объекта. ALL_OBJECTS.OBJECT_ID и V$SQL_PLAN.OBJECT#.
- op — операция
- cr — согласованное чтение (Consistent read)
- pr — физическое чтение (Physical reads)
- pw — физическая запись (Physical writes)
- time — timestamp, в микросекундах
- cost — оценка выполнения запроса (CBO)
- size — объем данных в байтах
- card — число возвращаемых строк
Похожие записи:
- No Related Posts
Источник: apps-oracle.ru
Statement Tracer for Oracle
Программы / Разработка / Отладка / Statement Tracer for Oracle
![]() |
Скачать Statement Tracer for Oracle | ![]() |
Для скачивания будет предоставлена ссылка на дистрибутив программы на сайте компании-разработчика.
Обзор Statement Tracer for Oracle (автоматический перевод)
STATEMENT TRACER для ORACLE является эффективным и простым в использовании свободным решением для отладки программ, взаимодействующих через интерфейс с Oracle RDBMS.
Просто выполните Statement Tracer, и Вы получите всю информацию, в которой Вы нуждаетесь.
— Очень эффективный при времени инструмент для разработки приложений и отладки.
— Позволяет инженеру службы технической поддержки и администратору базы данных находить проблему без справки от разработчика.
— Дает оценку Вашей производительности приложения в реальной жизни для идентификации возможных проблемных областей.
Источник: www.obnovisoft.ru
трассировщик операторов Oracle JDBC
Я ищу программное обеспечение для отслеживания всех утверждений в моей базе данных оракула. У меня есть приложение Delphi (без исходного кода), и есть много вызываемых хранимых процедур. Чтобы отследить весь выполненный запрос, я использую этот инструмент: Заявление Tracer для Oracle
Это прекрасно работает. Теперь у меня есть веб-приложение (Java + GWT, использующее JDBC для подключения к БД), и мне нужно сделать то же самое. Мне нужны не только вызовы из моего приложения в БД, но и каждый оператор, выполняемый внутри хранимой процедуры. Кто-нибудь знает инструмент, способный это сделать?
yourkit также имеет sql API — MozenRath
Вариантом может быть включение инструментов аудита сервера. См. этот вопрос SO: stackoverflow.com/questions/7914354/oracle-sql-query-loging — Miguel Prz
1 ответы
Есть проект трассировщика jdbc https://github.com/tokuhirom/jdbc-tracer где вы можете импортировать проект через maven и реализовать некоторые слушатели, получая операторы SQL и другую информацию из операторов JDBC. Я уверен, что если вы создадите визуальный проект с помощью своей библиотеки maven, вы сможете создать своего рода визуальный интерфейс, показывающий все SQL-запросы, выполненные с помощью драйвера JDBC.
Не тот ответ, который вы ищете? Просмотрите другие вопросы с метками java oracle gwt jdbc monitoring or задайте свой вопрос.
ADV
Связанные вопросы
Последние вопросы
Связанные теги
stackovergo.com 2022, под лицензией куб.см по-са 3.0 с указанием авторства. | Персональные данные | Cookies политики
Источник: stackovergo.com