Трассировка определённого SQL. Tracing for a specific SQL.

Event 10046 — это событие является стандартным методом сбора расширенной sql_trace информации для Oraclовых сессий.
Для вопросов связанных с производительностью запросов (Query Performance) обычные требования — это записать информацию об ожиданиях и биндах переменных. Эта задача выполняется при использовании 10046 с уровнем 12 или 4 (level 12/level 4).

Для методов которые требуют уровня трассировки действительны следующие значения:
0 — Нет трейса. Как если sql_trace off.
2 — Эквивалент обычного sql_trace;
4 — То же, что и 2, но дополняется значениями забинженых переменных;
8 — То же, что и 2, но дополняется событиями ожидания;
12 — То же, что и 2, но с доп. значениями забинженых переменных и событиями ожидания (как у уровней 4 и 8, собственно 4+8=12).

В конкретном случае мне требуется узнать значение переменной B1 у запроса  10q4ut6chvak6 (выпадает ORA-00600: internal error code, arguments: [kdsgrp1] при определённых значениях):

--- Current SQL Statement for this session (sql_id=10q4ut6chvak6) ---
SELECT R.*, C.CCN_ID, C.CCN_TITLE FROM ARDOME.RUNDOWN_ROW R
LEFT OUTER JOIN ARDOME.COLLECTION C ON R.RDR_SITE_ID_STR=C.CCN_SITE_ID_STR AND C.CCN_TYPE='program' WHERE RDR_ID=:B1

Включить:
alter system set events 'sql_trace[sql: 10q4ut6chvak6] level=12';

Найти трейс можно по запросу:
SELECT VALUE FROM V$DIAG_INFO WHERE NAME = 'Default Trace File';

Через некоторое время в трейсе можно обнаружить то, что требовалось найти:
PARSING IN CURSOR #140038752954880 len=177 dep=1 uid=103 oct=3 lid=103 tim=1494421918938952 hv=2567809606 ad='41f2229a0' sqlid='10q4ut6chvak6'
SELECT R.*, C.CCN_ID, C.CCN_TITLE FROM ARDOME.RUNDOWN_ROW R LEFT OUTER JOIN ARDOME.COLLECTION C ON R.RDR_SITE_ID_STR=C.CCN_SITE_ID_STR AND C.CCN_TYPE='program' WHERE RDR_ID=:B1
END OF STMT
BINDS #140038752954880:
Bind#0
oacdty=02 mxl=22(21) mxlc=00 mal=00 scl=00 pre=00
oacflg=03 fl2=1206001 frm=00 csi=00 siz=24 off=0
kxsbbbfp=7f5d50211b40 bln=22 avl=11 flg=05
value=2101705100110951942

Выключить:
alter system set events 'sql_trace[sql: 10q4ut6chvak6] off';

Отследить отслеживаемые запросы можно через oradebug
SQL> oradebug setmypid
Statement processed.
SQL> oradebug eventdump session
sql_trace[sql: 10q4ut6chvak6] level=12

 

N.B. Будьте бдительны, в моём случае я поймал то, что искал:
EXEC #140534692422696:c=0,e=303,p=0,cr=0,cu=0,mis=0,r=0,dep=1,og=2,plh=2289027174,tim=1494423351664104
* kdsgrp1-1: *************************************************
row 0x02cbbaca.7 continuation at
0x02cbbaca.7 file# 11 block# 768714 slot 7 not found

и далее +72Мб дополнительной информации. При многократном получении ошибки можно быстро забить файловую систему.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *