诊断事件设置¶
语法:
<set_events>::=ALTER {SYSTEM | SESSION} SET EVENTS (<event_definition>[:...n]);
<event_definition> ::= <event_name> TRACE <trace_spec>[,...n]
[OFF | FOREVER | LIFETIME seconds | AFTER t TIMES]
[LEVEL n]
<event_name> ::= {IMMEDIATE | eventnumber}
<trace_spec> ::= NAME {CONTEXT | tracename}
图例:
<set_events>
<event_definition>
<event_name>
<trace_spec>
参数:
IMMEDIATE:
立即将指定转储对象转储到跟踪文件中,不能与OFF、CONTEXT、FOREVER等同用。
eventnumber:
事件号,可以是错误号或内部事件号。内部事件列表如下所示
| 内部事件号 | 含义 |
|---|---|
| 10053 | 优化器状态跟踪 |
| 10046 | SQL执行跟踪 |
| 10033 | 排序跟踪 |
| 10103 | Hash跟踪 |
| 10104 | Hash连接跟踪 |
| 10210 | 数据块检查跟踪 |
| 10224 | 索引页面分裂/删除跟踪 |
| 10852 | 加锁跟踪 |
| 10250 | 堆内存分配 |
| 10880 | 网络通信协议信息跟踪 |
tracename:
转储的对象名。非立即转储的转储对象不能为控制文件信息转储、数据文件头转储、日志文件头转储、段信息转储和索引页面信息转储。
| tracename | 含义 |
|---|---|
| controlf | 控制文件信息转储 |
| file_hdrs | 数据文件头转储 |
| redohdr | 日志文件头转储 |
| segdump | 段信息转储 |
| treedump | 索引页面信息转储 |
| buffers | Buffer信息转储 |
| spc_cache | SPC缓存信息转储 |
| heapdump | 堆内存信息转储 |
| latches | Latch信息转储 |
| errorstack | 错误栈转储 |
| leaksegs | 泄漏段转储 |
| drop_segment | 泄漏段删除 |
CONTEXT:
根据内部事件号转储相关信息。错误号的诊断对象不能为CONTEXT。
OFF:
关闭诊断事件,不能与LEVEL n同用。
FOREVER:
表示事件在实例或会话的周期内保持有效状态
t:
诊断事件有效的次数
seconds:
指定诊断事件的生命期
n:
指定事件级别号或转储目标,转储级别默认为1,转储级别号为多个转储级别号的叠加。比如转储级别为7(级别1+级别2+级别4)则同时转储级别1、级别2和级别4对应的转储内容; 不能与OFF同用。
示例:
诊断事件状态查看:
Select * from V$DiagEvents;
用于查看当前所有已设置的session级和system级诊断事件。
配置参数¶
系统级诊断事件设置,通过:可设置多个诊断事件
EVENT = "eventnumber trace name tracename [forever,] [level n] : ......"
ENABLE_TIME_STAT:
是否开启运行时诊断的时间统计,包括SQL算子和等待事件的时间统计,可设置为true或false,默认为true。
关闭后表现:关闭后 V$SESSION_WAIT 、V$SQLSTAT 、V$SQL_PLAN_STATISTICS 等视图将不再显式时间相关信息。
参数 ENABLE_TIME_STAT 或 ENABLE_SQL_TRACE 任意一个开启时,可以通过动态视图 V$SESSION_LONGOPS 查看长时操作。