达梦数据库中直接“explain SQL语句”获得的执行计划是估算的执行计划,有可能与真实执行计划存在差别。在达梦数据库中可以通过如下方法获取真实执行计划:
方法一:在disql工具中使用set autotrace trace获取SQL实际的执行计划
C:\dmdbms_270\bin>disql
disql V8
用户名:
密码:
服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间 : 17.999(ms)
SQL>
SQL> SET AUTOTRACE TRACE ---开启autotrace
SQL> sf_set_session_para_value('MONITOR_SQL_EXEC',1); ---SQL执行监控用于ET工具获取每个操作的耗时
DMSQL 过程已成功完成
已用时间: 0.345(毫秒). 执行号:1001.
SQL> SELECT COUNT(*) FROM TAB_COUNT_DM;
行号 COUNT(*)
---------- --------------------
1 13
1 #NSET2: [1, 1->1, 0]
2 #PRJT2: [1, 1->1, 0]; exp_num(1), is_atom(FALSE)
3 #FAGR2: [1, 1, 0]; sfun_num(1),
已用时间: 3.254(毫秒). 执行号:1002.
SQL> et(1002);
行号 OP TIME(US) PERCENT RANK SEQ N_ENTER
---------- ----- -------------------- ------- -------------------- ----------- -----------
1 PRJT2 3 0.93% 3 2 4
2 DLCK 3 0.93% 3 0 2
3 NSET2 57 17.7% 2 1 3
4 FAGR2 259 80.43% 1 3 2
已用时间: 6.552(毫秒). 执行号:1003.
方法二、dump内存中执行计划缓存到文本文件
---step 1
---查出对应SQL语句的执行计划缓存item
select cache_item from v$cachepln where sqlstr like 'select * from t1 where id%';
---step 2
---根据cache_item,dump指定的执行计划缓存,假如step 1中查询结果为123123213
alter session set events 'immediate trace name plndump level 123123213,dump_file ''/home/dmdba/sql111.log''';
两种方法区别:
方法一,需要等待SQL语句执行完成才会打印执行计划;
方法二,在语句解析生成执行计划后就可以查询到;
DM 武汉达梦数据库股份有限公司
24小时免费服务热线:400 991 6599
达梦在线服务平台:https://eco.dameng.com
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




