Wiki source code of Trassirovka_diagnostic

Last modified by Cozlovschii Dmitrii on 2016/07/19 11:00

Show last authors
1 1 : Материал на сайте Oracle : https:~/~/support.oracle.com/epmos/faces/MosIndex.jspx
2
3
4
5
6 (% style="font-family: sans-serif; font-size: 16px; font-style: normal; font-weight: normal; text-align: start; line-height: 22.4px; font-size: 16px; font-weight: 700" %)__Инструкции__(% style="font-family: sans-serif; font-size: 16px; font-style: normal; font-weight: normal; line-height: 22.4px; text-align: start;" %) :
7
8 ~1. Если нет возможности выполнить команду alter session в диагностируемой сессии,
9
10 то нужно определить sid и serial# нужной сессии - по view v$session.
11
12
13 2. Включить трассировку:
14
15 2.1 Если есть возможность выполнить в диагностируемой сессии, то:
16
17 alter session set events '10046 trace name context forever, level 12'
18
19 Вместо 12 могут быть установлены другие уровни, подробности - по ссылке в конце описания.
20
21 2.2 Если включение выпоняется из другой сессии, то:
22
23 Вместо sid, serial# - значения, найденные на первом шаге.
24
25 begin
26
27 dbms_system.set_ev(sid,serial#,10046,12,'');
28
29 end;
30
31 Трассировку желательно включить непосредственно перед выполнением проблемного действия,
32
33 чтобы уменьшить объём не несущих пользы дял диагностики данных.
34
35 2.3 STATISTICS_LEVEL (опционально)
36
37 Значение по умолчанию для параметра statistics_level = typical. При таком значении
38
39 детальная статистика выполения запроса (row source execution statistics) может
40
41 содержать существенную погрешность. Если есть подозрения на ошибки подсчёта статистики
42
43 выполения, можно повторить трассировку с включённым
44
45 alter session set statistics_level = all
46
47 При этом возможно и увеличение общего времени выполения запроса из-за доп. нагрузки на
48
49 более точный подсчёт статистики, особенно при большом количестве относительно быстрых
50
51 операций (nested loops).
52
53
54
55 3. Выполнить проблемное действие в программе.
56
57
58
59 4. Дождаться окончания работы в приложении и закрыть программу (завершить сессию).
60
61 Если не завершить сессию (не закрыть программу), то часть необходимой информации не
62
63 попадёт в трэйс-файл. Перед закрытием программы, из диагностируемой сессии нужно
64
65 выполнить (если есть возможность) следующие команды:
66
67 alter session set session_cached_cursors = 0; ~-~- закрытие кэшированных курсоров
68
69 alter session set events '10046 trace name context off'; ~-~- отключение трассировки
70
71 Именно при закрытии курсоров в трэйс файл попадает информация о плане выполения запросов.
72
73
74 5. Проверить, сформировался ли трэйс-файл.
75
76 - В обычной конфигурации трэйс-файлы формируются в папаке udump.
77
78 Найти путь к udump можно так:
79
80 select value from v$parameter where name='user_dump_dest'
81
82 Если сервер рабоатет в Shared Server Mode, а также если диагностируемая сессия - job
83
84 или другой backgroup процесс, то трэйс будет сформирован в папке bdump.
85
86 select value from v$parameter where name='backgroud_dump_dest'.
87
88 (В 11g условия изменились).
89
90 - Трэйс должен содержать строку вида:
91
92 ~~*~** SESSION ID:(sid.serial#) <дата и время>
93
94 где sid и serial# - из первого пункта
95
96 - Если трэйс не сформировался, необходимо повторить процедуру.
97
98 Возможно, была некорректно идентифицирована нужная сессия.
99
100
101 6. Обработать полученный файл при помощи tkprof.
102
103 Необходимо получить 4 файла, обработанных tkprof - без сортировки,
104
105 с сортировкой sort=prsela, sort=exeela, sort=fchela.
106
107
108 Пример: (имя файла трассировки - catalog_ora_2384.trc)
109
110
111 Вызов tkprof из командной строки:
112
113
114 При каждом вызове необходимо указывать новое имя файла, чтобы не перекрыть уже имеющиеся.
115
116 Удобно добавлять суффикс с первой буквой параметра сортировки.
117
118
119 1) tkprof catalog_ora_2384.trc catalog_ora_2384.out sys=no
120
121 2) tkprof catalog_ora_2384.trc catalog_ora_2384_p.out sys=no sort=prsela
122
123 3) tkprof catalog_ora_2384.trc catalog_ora_2384_e.out sys=no sort=exeela
124
125 4) tkprof catalog_ora_2384.trc catalog_ora_2384_f.out sys=no sort=fchela
126
127
128 7. Для дальнейшего анализа нужны все полученные на выходе tkprof файлы и файл трассировки.
129
130
131 Доп. информация: http:~/~/www.sql.ru/faq/faq_topic.aspx?fid=389
132
133
134 ~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
135
136 /*Включение трассировки для конкретной сессии
137
138 SID=12, SerialNum=26423, тип трассировки - 12*/
139
140 begin
141
142 dbms_system.set_ev(12,26423,10046,12,'');
143
144 end;
145
146
147 ~-~- Отключение трассировки
148
149 begin
150
151 dbms_system.set_ev(12,26423,10046,0,'');
152
153 end;
154
155
156 ~-~-~-~- CMD
157
158 cd E:\oracle\diag\rdbms\trial\trial\trace ~/~/Ora11
159
160 E:
161
162 tkprof trial_ora_2236.trc trial_ora_2236.out sys=no ~/~/все
163
164
165 tkprof trial_ora_2236.trc trial_ora_2236.out sys=no sort=fchela ~/~/только fetch