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

相关推荐
尽兴-7 天前
深入理解MySQL EXPLAIN工具与索引优化最佳实践
mysql·adb·dba·索引·explain·索引优化
liwenzhen200513 天前
DM 收集统计信息后内存中的SQL 执行计划无效测试
dm·收集统计信息
佛祖让我来巡山14 天前
【面试题】如何使用 MySQL 的 EXPLAIN 语句进行查询分析?
sql分析·explain
保定公民16 天前
达梦DMDRS数据库同步用户最小权限
数据库·达梦·达梦数据库·数据同步·dm·dmdrs
liwenzhen200521 天前
DM SQL 排序优化-消除排序
排序·sort·dm
liwenzhen20051 个月前
DM 修改dm.ini 参数
dm·dm.ini·达梦数据库参数文件
liwenzhen20051 个月前
DM 使用DBMS_SQLTUNE 系统包查看SQL 执行计划
执行计划·dm·dbms_sqltune
liwenzhen20051 个月前
DM 行级锁
行级锁·dm
liwenzhen20051 个月前
DM 配置 unixODBC
odbc·dm
梁萌1 个月前
保姆级的MySQL执行计划(Explain)解读
数据库·mysql·explain·执行计划