#追踪

YashanDB定义了一系列追踪事件,用户可按需选择追踪不同的事件从而了解SQL执行过程、不同阶段YashanDB各组件的内部状态等信息,助力于性能观测与调整。

# 追踪事件

每一个追踪事件拥有一个唯一ID,对应一个不同的追踪目标,追踪启/停时采用事件ID进行指定。

YashanDB支持的事件如下表所示:

追踪事件ID 追踪级别 追踪目标
10046 1(默认值):语法分析、执行、提取的次数、时间、CPU时间,物理读次数,逻辑读次数,行数,提交和回归,执行计划的行数,时间,一致性读数,物理读数,物理写数等
4:level1 + 绑定参数
8:level1 + 等待事件
12:level1 + level4 + level8
追踪SQL语句执行时的性能信息
10053 1(默认值)
2
级别1会比级别2多输出优化器参数信息
追踪CBO优化器在解析(Parse)阶段的执行状态,主要包括自顶向下的算子选择过程信息、待选算子的代价信息、计算算子代价的统计信息等

# 开启追踪

根据追踪生效范围,开启追踪的操作可分为:

  • 会话级追踪:执行ALTER SESSION语句为当前会话可以开启追踪。

  • 全局追踪:执行ALTER SYSTEM为全局开启追踪。追踪事件会对系统性能产生一定影响,非必要不建议开启全局追踪。

开启追踪时,可以按需指定如下属性信息:

  • EVENT_ID:追踪事件ID,必填参数,根据ID值指定具体的追踪事件。

  • LEVEL LEVEL_NUM:追踪级别,可选参数,每一个追踪事件都支持不同的追踪级别,在不同的级别下追踪获得的输出信息不同。

TRACE NAME CONTEXT、FOREVER:仅用于语法兼容,无实际含义。

-- 以默认级别追踪10053事件
ALTER SESSION SET EVENTS = '10053';
ALTER SESSION SET EVENTS = '10053 TRACE NAME CONTEXT';
ALTER SESSION SET EVENTS = '10053 TRACE NAME CONTEXT FOREVER';

-- 以级别2追踪10053事件
ALTER SESSION SET EVENTS = '10053 TRACE NAME CONTEXT FOREVER, LEVEL 2';

-- 一次追踪多个事件
ALTER SESSION SET EVENTS = '10053, LEVEL 2:10046, LEVEL 12';

Note

由于YashanDB已完成历史执行SQL的解析缓存,开启10053追踪有可能因为命中SQL缓存而未跟踪到trace日志,因此可将业务SQL做简单改写,然后重新执行完成SQL硬解析并记录trace日志。SQL改写时,可在SQL语句中添加无意义字符串,例如原SQL语句select c1 from t1可以改写为select /*abc*/ c1 from t1

# 追踪结果

追踪结果将以trace文件承载,并通过时间和会话ID(sid)作为标识区分不同的会话、不同时期产生的trace文件,默认命名格式为{dbname}{yyyymmdd}{sid}.trc。

# 文件名称配置

YashanDB支持在trace文件名中添加自定义标识,由TRACE_FILE_IDENTIFIER参数指定。

ALTER SESSION SET TRACE_FILE_IDENTIFIER = 'YashanDB_Trace';
-- 设置后,生成的trace文件的名称将为{dbname}_{yyyymmdd}_{sid}_YashanDB_Trace.trc

# 文件内容

# 10046事件

追踪10046事件输出的信息包括语法分析、执行、提取的次数、时间、CPU时间,物理读次数,逻辑读次数,行数,提交和回归,执行计划的行数,时间,一致性读数,物理读数,物理写数等。

级别12的输出示例如下:

Trace file /data/yashan/yashan/data/yashan/db-1-1/diag/trace/yashandb_20250417_27_trace_event_10046.trc
YashanDB Server Enterprise Edition {版本号} x86_64 67d26ef
Session ID: 27  (2025-04-17 11:43:29.302)

=====================
PARSING IN CURSOR #140146796809528 len=61 dep=0 uid=0 yct=7 lid=0 tim=1744861410698210 hv=143826514 ad='7f76780a5648' sqlid='1wsv3qmr968yu'
BEGIN DBMS_OUTPUT.GET_LINES(?,?); DBMS_OUTPUT.PUT(NULL); END;
END OF STMT
PARSE #140146796809528 c=22,e=22,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=1,plh=0,tim=1744861410698214
BINDS #140146796809528:

  Bind#0
    ydbdty=37 mxl=0 scl=0 pre=0 avl=0 toid=0
    value="NULL"
  Bind#1
    ydbdty=4 mxl=4 scl=0 pre=0 avl=4 toid=0
    value="2147483647"
WAIT #140146852137560: nam='log file sync' ela= 1 tim=1744861410698717
WAIT #140146852153968: nam='log file sync' ela= 0 tim=1744861410698851
EXEC #140146796809528 c=1190,e=1190,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=1,plh=0,tim=1744861410699410
WAIT #140146796809528: nam='db file scattered read' ela= 12 tim=1744861410700963
WAIT #140146796809528: nam='log file parallel write' ela= 66 tim=1744861410701784
WAIT #140146796809528: nam='redo remote sync complete' ela= 516 tim=1744861410702303
WAIT #140146796809528: nam='log file sync' ela= 593 tim=1744861410702304
WAIT #140146796809528: nam='db file scattered read' ela= 8 tim=1744861410702836
WAIT #140146796809528: nam='log file parallel write' ela= 69 tim=1744861410703035
WAIT #140146796809528: nam='redo remote sync complete' ela= 481 tim=1744861410703519
WAIT #140146796809528: nam='log file sync' ela= 559 tim=1744861410703520
CLOSE #140146796809528 type=0,tim=1744861410703989
WAIT #140146801009976: nam='SQL*Net message to client' ela= 25 tim=1744861410704136
WAIT #140146801009976: nam='db file scattered read' ela= 14 tim=1744861410704207
WAIT #140146801009976: nam='log file parallel write' ela= 65 tim=1744861410705127
WAIT #140146801009976: nam='redo remote sync complete' ela= 528 tim=1744861410705657
WAIT #140146801009976: nam='log file sync' ela= 604 tim=1744861410705658
WAIT #140146801009976: nam='db file scattered read' ela= 9 tim=1744861410706141
WAIT #140146801009976: nam='log file parallel write' ela= 68 tim=1744861410706386
WAIT #140146801009976: nam='redo remote sync complete' ela= 754 tim=1744861410707144
WAIT #140146801009976: nam='log file sync' ela= 834 tim=1744861410707148
WAIT #140146801009976: nam='db file scattered read' ela= 11 tim=1744861410708790
WAIT #140146801009976: nam='log file parallel write' ela= 68 tim=1744861410709681
WAIT #140146801009976: nam='redo remote sync complete' ela= 532 tim=1744861410710217
WAIT #140146801009976: nam='log file sync' ela= 612 tim=1744861410710219
WAIT #140146801009976: nam='db file scattered read' ela= 11 tim=1744861410710890
WAIT #140146801009976: nam='log file parallel write' ela= 68 tim=1744861410711091
WAIT #140146801009976: nam='redo remote sync complete' ela= 503 tim=1744861410711597
WAIT #140146801009976: nam='log file sync' ela= 582 tim=1744861410711599
STAT #140146801009976 id=1 cnt=0 pid=0 pos=1 obj=0 op='SELECT (cr=0 cu=0 pr=0 pw=0 time=130 us cost=0 card=0)'
STAT #140146801009976 id=2 cnt=0 pid=1 pos=1 obj=0 op='MERGE JOIN ANTI (cr=0 cu=0 pr=0 pw=0 time=125 us cost=2 card=1)'
STAT #140146801009976 id=3 cnt=4 pid=2 pos=1 obj=0 op='MERGE SORT (cr=0 cu=0 pr=0 pw=0 time=55 us cost=0 card=0)'
STAT #140146801009976 id=4 cnt=4 pid=3 pos=1 obj=2653 op='TABLE ACCESS FULL TRACE_EVENT_10046_INDEXT_8 (cr=0 cu=1 pr=0 pw=0 time=23 us cost=1 card=4)'
STAT #140146801009976 id=5 cnt=7 pid=2 pos=2 obj=0 op='MERGE SORT (cr=0 cu=0 pr=0 pw=0 time=42 us cost=0 card=0)'
STAT #140146801009976 id=6 cnt=13 pid=3 pos=1 obj=2652 op='TABLE ACCESS FULL TRACE_EVENT_10046_INDEXT_7 (cr=0 cu=1 pr=0 pw=0 time=16 us cost=1 card=13)'
CLOSE #140146801009976 type=0,tim=1744861410712259
WAIT #140146801009976: nam='SQL*Net message from client' ela= 3 tim=1744861410712449

# 10053事件

追踪10053事件输出的信息包括trace文件路径信息、数据库版本信息、会话ID与起始时间、追踪的SQL语句、优化器参数信息(级别1)、算子追踪信息以及执行计划信息。

级别1的输出示例如下:

Trace file /data/master/YASDB_DATA/diag/trace/yashandb_20250331_22.trc
YashanDB Server Enterprise Edition {版本号} x86_64
Session ID: 22  (2025-03-31 16:04:13.591)

**************** Trace Start [Event: 10053  Level: 1] ****************
Current SQL statement:
select 1+2 from dual

******************** CBO Parameters ******************

BLOOM_FILTER_FACTOR                      = 0.30
DML_PARALLEL                             = FALSE
FILTER_EXTEND_MODE                       = NOTNULL
FILTER_OR_TO_UNION                       = TRUE
MAX_RECURSION_DEPTH                      = 1000
OPT_FILTER_THRESHOLD                     = 0.30
OPTIMIZER_DYNAMIC_SAMPLING               = 0
QUERY_REWRITE_ENABLED                    = FALSE
SQL_MAP                                  = FALSE
STATISTICS_LEVEL                         = TYPICAL
SUBQUERY_NDV_FACTOR                      = 0.10
USE_STORED_OUTLINES                      = FALSE
_COLUMNAR_ENABLE_HASH_GROUP_DISTINCT     = TRUE
_COLUMNAR_ENABLE_FILTER_INVALID          = FALSE
_RWRT_OPT                                = 255
_ENABLE_EXPLAIN_STAGE                    = TRUE
_ENABLE_EXPLAIN_STATS                    = TRUE
_OPTIMIZE_EXTEND_FILTER                  = TRUE
_SPAREINDEX_OPT                          = ON
_TAC_FILTER_PUSH_THRESHOLD               = 5
_OPTMZ_MINMAX_OPT                        = SINGLE
_OPTMZ_EARLY_GROUP_OPT                   = ON
_OPTMZ_EXEC_ENGINE                       = ROW
_OPTMZ_ENABLE_DSTB_AC                    = TRUE
_B_TREE_BITMAP_PLANS                     = TRUE
_OPTMZ_ENABLE_DUP_TABLE_PARALLEL         = TRUE
_HASH_JOIN_ALGORITHM                     = PARTITION

*************** CBO Optimize Trace Start *************

Group 0
  Logical : Select [ 1 ] 
  Physical 0 :  Select [ 1 ] 

Group 1
  Logical : Project [ 2 ] 
  Physical 0 :  Project [ 2 ] 

Group 2
  Logical : Scan   Table Name: X$DUAL
  Physical 0 :  TableFullScan   Table Name: X$DUAL

  Physical 0: TableFullScan
  Stats:  rows=1  rowSize=0  keyDistinct=1  columns=1  selectivity=1.000000
  Cost:   self=8.004000  total=8.004000  fetch=0.000088 

  Group 2 Best :
  Logical : Scan   Table Name: X$DUAL
  Best Physical : TableFullScan   Table Name: X$DUAL
  Cost:   self=8.004000  total=8.004000  fetch=0.000088 

  Physical 0: Project
  Stats:  rows=1  rowSize=0  keyDistinct=1  columns=1  selectivity=1.000000
  Cost:   self=0.000000  total=8.004000  fetch=0.000088 

  Group 1 Best :
  Logical : Project [ 2 ] 
  Best Physical : Project [ 2 ] 
  Cost:   self=0.000000  total=8.004000  fetch=0.000088 

  Physical 0: Select
  Stats:  rows=1  rowSize=8  keyDistinct=1  columns=1  selectivity=1.000000
  Cost:   self=0.000000  total=8.004000  fetch=0.000088 

  Group 0 Best :
  Logical : Select [ 1 ] 
  Best Physical : Select [ 1 ] 
  Cost:   self=0.000000  total=8.004000  fetch=0.000088 

*************** Trace Bottom Up **********************

Group 2
  Logical : Scan   Table Name: X$DUAL
  Physical 0 :  TableFullScan   Table Name: X$DUAL

  Physical 0: TableFullScan
  Stats:  rows=1  rowSize=0  keyDistinct=1  columns=1  selectivity=1.000000
  Cost:   self=8.004000  total=8.004000  fetch=0.000088 

  Group 2 Best :
  Logical : Scan   Table Name: X$DUAL
  Best Physical : TableFullScan   Table Name: X$DUAL
  Cost:   self=8.004000  total=8.004000  fetch=0.000088 

Group 1
  Logical : Project [ 2 ] 
  Physical 0 :  Project [ 2 ] 

  Group 1 Best :
  Logical : Project [ 2 ] 
  Best Physical : Project [ 2 ] 
  Cost:   self=0.000000  total=8.004000  fetch=0.000088 

Group 0
  Logical : Select [ 1 ] 
  Physical 0 :  Select [ 1 ] 

  Group 0 Best :
  Logical : Select [ 1 ] 
  Best Physical : Select [ 1 ] 
  Cost:   self=0.000000  total=8.004000  fetch=0.000088 

***************** CBO Optimize Trace End *************

******************************************************
*                   Executor Plan                    *
******************************************************
SQL hash value: 2231489676
Optimizer: ADOPT_C
 
+----+--------------------------------+----------------------+------------+----------+-------------+--------------------------------+
| Id | Operation type                 | Name                 | Owner      | Rows     | Cost(%CPU)  | Partition info                 |
+----+--------------------------------+----------------------+------------+----------+-------------+--------------------------------+
|  0 | SELECT STATEMENT               |                      |            |          |             |                                |
|  1 |  TABLE ACCESS FULL             | X$DUAL               | SYS        |         1|        8( 0)|                                |
+----+--------------------------------+----------------------+------------+----------+-------------+--------------------------------+
***************** Trace End [Event: 10053  Level: 1] *****************

# 关闭追踪

若不再需要对某个事件进行自动追踪,可以按需关闭自动追踪:

  • EVENT_ID:追踪事件ID,必填参数,根据ID值指定具体的追踪事件。

  • OFF:通过该关键字关闭自动追踪。

TRACE NAME CONTEXT、FOREVER:仅用于语法兼容,无实际含义。

ALTER SESSION SET EVENTS = '10053 OFF:10046 OFF';
edit-icon
反馈
coperate-icon
coperate
合作
communication-icon
communicate
交流