DM SQL 查看执行计划

1 - 定位问题 SQL

  • 用户直接提供的问题SQL。
  • 通过实时系统视图 "v$long_exec_sqls" 观察到的问题SQL。
  • 通过开启SQLLOG 日志分析出执行时间或执行次数超过设定的阈值的问题SQL。

2 - 需要和用户确认上面找到的问题SQL

避免后续分析的偏差

3 - 使用 "DM 管理工具"

3.1 - 个人习惯

在查询窗口最上方,放置常用的SQL:

复制代码
--set schema user01    # 切换到问题SQL 所属Schema下
--alter session set 'MONITOR_SQL_EXEC'=1   #
--et()   # 打印操作符统计时间
--select * from v$dm_ini where para_name like 'ENABLE_IN%'  #查找需要设定的HINT

3.2 - 打印问题SQL 的执行计划

查看执行计划<实际不执行SQL,只是产生预估的执行计划> explain select * from <table_name>;

例如:

复制代码
SQL> explain select * from test01;

1   #NSET2: [1, 3, 64]
2     #PRJT2: [1, 3, 64]; exp_num(3), is_atom(FALSE)
3       #CSCN2: [1, 3, 64]; INDEX33555486(test01); btr_scan(1)

已用时间: 4.232(毫秒). 执行号:0.

3.3 - 打印问题SQL 的操作符统计耗时

需要先执行一次问题SQL,然后获取执行号,例如:3802 select * from <table_name>;

打印操作符统计耗时 et(3802)

例如:

复制代码
现有测试用户登录,并执行测试的SQL
conn user01/xx

alter session set 'MONITOR_SQL_EXEC'=1;

SQL> alter session set 'MONITOR_SQL_EXEC'=1;
SQL> select * from test01;

行号     id          name
---------- ----------- ----
1          1           a
2          2           b
3          3           c

已用时间: 0.229(毫秒). 执行号:3802.


使用管理员查看 ET:
conn sysdba/xx
SQL> ET(3802);

行号     OP    TIME(US)             PERCENT RANK                 SEQ         N_ENTER     MEM_USED(KB)         DISK_USED(KB)        HASH_USED_CELLS      HASH_CONFLICT        DHASH3_USED_CELLS DHASH3_CONFLICT HASH_SAME_VALUE
---------- ----- -------------------- ------- -------------------- ----------- ----------- -------------------- -------------------- -------------------- -------------------- ----------------- --------------- --------------------
1          DLCK  1                    1.92%   4                    0           2           0                    0                    0                    0                    NULL              NULL            0
2          PRJT2 2                    3.85%   3                    2           4           0                    0                    0                    0                    NULL              NULL            0
3          NSET2 24                   46.15%  2                    1           3           0                    0                    0                    0                    NULL              NULL            0
4          CSCN2 25                   48.08%  1                    3           2           0                    0                    0                    0                    NULL              NULL            0

已用时间: 23.943(毫秒). 执行号:4501.

4 - 使用 "disql"打印实际的执行计划

在 disql 下面,开启autotrace

注意:已经测试过最新版本的"DM 管理工具"中就可以设置 autotrace,那么就无需使用 disql 工具了。

复制代码
SQL> conn <username>/<password>
SQL> set autotrace traceonly
SQL> select * from <table_name>; 

例如

复制代码
1   #NSET2: [1, 1, 64]
2     #PRJT2: [1, 1, 64]; exp_num(3), is_atom(FALSE)
3       #CSCN2: [1, 1, 64]; INDEX33555486(test01); btr_scan(1)

Statistics
-----------------------------------------------------------------
        0           data pages changed
        0           undo pages changed
        1           logical reads
        0           physical reads
        0           redo size
        259         bytes sent to client
        86          bytes received from client
        1           roundtrips to/from client
        0           sorts (memory)
        0           sorts (disk)
        0           rows processed
        0           io wait time(ms)
        0           exec time(ms)


已用时间: 0.161(毫秒). 执行号:3509.

欢迎访问达梦技术分享社区 ECO

https://eco.dameng.com

相关推荐
liwenzhen20051 天前
Linux 环境编译安装 dmPython
dmpython·dm
2 天前
达梦数据库—锁
数据库·达梦数据库·dm
5 天前
达梦数据库-事务
数据库·达梦数据库·dm
howard200510 天前
6.5 Hive查询优化:执行计划与性能初探
hive·性能优化·执行计划
装不满的克莱因瓶25 天前
【Java架构师体系课 | MySQL篇】③ Explain执行计划详解
java·数据库·mysql·架构·优化·索引·explain
l1t1 个月前
DeepSeek辅助编写转换DuckDB json格式执行计划到PostgreSQL格式的Python程序
数据库·python·postgresql·json·执行计划
没有bug.的程序员3 个月前
SQL 执行计划解析:从 EXPLAIN 到性能优化的完整指南
java·数据库·sql·性能优化·explain·执行计划
学海无涯,行者无疆6 个月前
深入浅出:Oracle 数据库 SQL 执行计划查看详解(1)——基础概念与查看方式
数据库·sql·oracle·执行计划·sql执行计划·查看执行计划·sql性能优化
驰愿7 个月前
ET EntityRef EntityWeakRef 类分析
unity·et