10053事件是达梦数据库中用于追踪SQL优化器内部决策机制的重要工具。通过启用10053事件,可以获取SQL语句在优化器生成执行计划过程中的详细信息,包括单表访问路径的代价评估、多表连接顺序和连接方法的代价计算等。
以下是一个完整的示例,展示如何收集10053事件的跟踪信息。
在启用10053事件之前,首先需要确定生成的跟踪文件将被保存在哪个目录中。可以通过以下SQL语句查询TRACE_PATH参数的值:
select * from v$dm_ini where para_name = 'TRACE_PATH';
该命令将返回当前数据库的跟踪文件存储路径,例如 /opt/dmdbms/data/trace。
在会话中启用10053事件,并设置适当的level值。level参数用于控制跟踪信息的详细程度,通常设置为1或2。
alter session set events '10053 trace name context forever,level 2';
level 1:记录基本的优化器信息。
level 2:记录更详细的优化器信息,包括代价计算和访问路径选择。
在10053事件开启后,执行你想要分析的SQL语句。例如:
select * from T11 left join T12 on T11.ID = T12.ID;
该SQL语句将触发优化器生成执行计划,并在跟踪文件中记录详细的优化过程。
在SQL语句执行完成后,关闭10053事件以停止跟踪:
alter session set events '10053 trace name context off';
生成的跟踪文件位于TRACE_PATH指定的目录下,文件名格式为 DMSERVER_月日_时分_session_id.trc。例如:
DMSERVER_1223_1430_1303.trc
你可以使用文本编辑器打开该文件,查看优化器生成执行计划的详细过程。
以下是一个跟踪文件的片段,展示了优化器在生成执行计划时的详细信息:
*** Plan before optimized:
project[0x7f85483727e0] (0);
select[0x7f85483721b0] (1); (TB1.NAME = '张三')
base table[0x7f8548371b28] (TB1, FULL SEARCH) (0);
<<<<< selectivity estimate of table TB1 >>>>>
*** stdesc 1: column = NAME, scan_type = EQU, key = ('张三')
stat_info(33555468,0,'I')= {
#Valid = 'Y',
#Type = 'Freq',
#Card = 1000000,
#NDV = 2,
#Nulls = 0,
#LP = 2725,
#LVLS = 2,
#CLUF = 0,
#NK = 0,
#NS = 1000000}
---> st = 0.00000
>>>>> total: 1000000, estimate match rows: 1, st: 0.00000; -- st_other: 1.000, n_stdesc: 1
---------------- single table access path probe for TB1 ----------------
*** path 1: INDEX33555466 (FULL search), cost: 128.46251
*** path 2: INDEX33555467 (FULL search), cost: 1028.76071
*** path 3: IDX_NAME (EQU search), cost: 0.06525
>>> best access path: IDX_NAME (EQU search), cost: 0.06525
*** BEST PLAN FOR THIS STATEMENT ***
project[0x7f8548389b98] (cost: 0.06525, rows: 1);
base table[0x7f854838a828] (TB1, IDX_NAME, EQU SEARCH) (cost: 0.06525, rows: 1);
在达梦数据库2025Q2版本中,支持将10053事件的跟踪信息记录到系统视图v$trace_info中,无需手动查看文件。操作步骤如下:
-- 1. 开启10053事件并设置为DYNAMIC模式
alter session set events '10053 trace name context DYNAMIC, level 2';
-- 2. 执行SQL语句
select * from T11 left join T12 on T11.ID = T12.ID;
-- 3. 关闭10053事件
alter session set events '10053 trace name context off';
-- 4. 查询v$trace_info视图
select * from v$trace_info;
通过以上步骤,你可以成功收集并分析10053事件的跟踪信息。该事件特别适用于需要深入了解SQL优化器行为的场景,例如SQL性能调优和执行计划分析。在2025Q2版本中,通过v$trace_info视图可以更方便地查看跟踪信息,无需上服务器手动查找和解析.trc文件。
文章
阅读量
获赞
