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

相关推荐
liwenzhen20055 天前
DM 修改dm.ini 参数
dm·dm.ini·达梦数据库参数文件
liwenzhen20055 天前
DM 使用DBMS_SQLTUNE 系统包查看SQL 执行计划
执行计划·dm·dbms_sqltune
liwenzhen20057 天前
DM 行级锁
行级锁·dm
liwenzhen20057 天前
DM 配置 unixODBC
odbc·dm
梁萌18 天前
保姆级的MySQL执行计划(Explain)解读
数据库·mysql·explain·执行计划
liwenzhen200521 天前
DM 常用 HINT 参考
dm·hint
liwenzhen200521 天前
DM SQL 排序优化
dm·sql 排序优化
liwenzhen200521 天前
DMDRS 配置
dm·drs
liwenzhen200521 天前
Linux 环境编译安装 dmPython
dmpython·dm