Wiki source code of Trassirovka_diagnostic
Last modified by Cozlovschii Dmitrii on 2016/07/19 11:00
Show last authors
| author | version | line-number | content |
|---|---|---|---|
| 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 |