DM7 中存在一些动态TRACE,在ENABLE_MONITOR=0的情况下依然可以用来跟踪一些问题,以下是部分TRACE事件说明
-1事件
–普通,出现运行时错误将SQL语句输出到TRACE文件中
alter session 0 set events ‘-1 trace name errorstack,level 1’;
–慎用,LEVEL 2情况下,服务器运行中出现错误会将错误语句以及错误堆栈都输出到TRACE文件中,但是抓取堆栈可能导致数据库服务器异常
alter session 0 set events ‘-1 trace name errorstack,level 2’;
10001事件
alter session 0 set events ‘10001 trace name context forever,level 1’
ALTER SESSION 0 SET EVENTS ‘10002 TRACE NAME CONTEXT FOREVER,LEVEL 1’’
操作类型编号|执行号|VM地址|数据字符长度|处理数据行数|左儿子数据长度|左儿子行数|右儿子数据长度|右儿子行数|操作符状态|操作符下一状态|该次进入操作符耗时
支持的操作符如下:
MERGER INNER
BLKUP
GSEK
MERGE SEMI
NEST LOOP INDEX JOIN
SLCT
CSCN
HASH LEFT SEMI
CSEK
HASH INNER JOIN
INDEX JOIN
INDEX LEFT OUTER JOIN
INDEX SEMI JOIN
HASH LEFT SEMI
HASH RIGHT OUT
HASH RIGHT SEMI
例子:
explain select top 2000 * from testa;
1 #NSET2: [10, 2000, 12]
2 #PRJT2: [10, 2000, 12]; exp_num(2), is_atom(FALSE)
3 #TOPN2: [10, 2000, 12]; top_num(2000)
4 #CSCN2: [10, 99999, 12]; INDEX33555514(TESTA)
select top 2000 * from testa;
略
TRACE 文件内容
200|23|19702032|12|1000|0|0|0|0|CSCN2_STATE_START|CSCN2_STATE_FETCH|34|
200|23|19702032|12|1000|0|0|0|0|CSCN2_STATE_FETCH|CSCN2_STATE_FETCH|41|
BDTA SIZE 为1000 所以一次只能FETCH 1000行,TOP和PRJT 不支持10002事件,所以内容中只含有CSCN 相关,
俩行事件相加为该CSCN操作符总耗时
10003 事件
trace含有特定操作符的语句输出到TRACE文件
alter session 0 set events ‘10003 trace name context forever,level 1’
level 支持1到15 含义如下:
LEVEL 1 CSCN
LEVEL 2 HASH JOIN
LEVEL 4 HAGR
LEVR 8 NEST LOOP
支持 这几种操作符号组合,比如TRACE CSCN 和 HASH JOIN 的语句,level 可以设置为3 (1+2)
alter session 0 set events ‘10003 trace name context forever,level 3’
10053事件
trace SQL语句的计划生成过程输出到TRACE 文件,TRACE出的是SQL 的实际执行计划
alter session 0 set events ‘10053 trace name context forever,level 1’