签到成功

知道了

CNDBA社区CNDBA社区

DM 达梦 性能优化工具 ET 使用说明

2022-12-19 22:25 2085 0 原创 DM 达梦
作者: dave

1 ET 工具说明

在之前的博客,我们介绍了达梦的执行计划,如下:

DM7 达梦数据库 查询优化 — 执行计划 查看
https://www.cndba.cn/dave/article/3630

在执行计划中我们知道里面有很多不同的操作符:

  1. CSCN :基础全表扫描(a),从头到尾,全部扫描
  2. SSCN :二级索引扫描(b), 从头到尾,全部扫描
  3. SSEK :二级索引范围扫描(b) ,通过键值精准定位到范围或者单值
  4. CSEK :聚簇索引范围扫描(c) ,通过键值精准定位到范围或者单值
  5. BLKUP :根据二级索引的ROWID 回原表中取出全部数据(b + a)
  6. SLCT:过滤条件,是对结果集进行过滤,需要注意的是操作符的描述信息,从描述信息中可以看到对于下层操作有哪些可用的过滤条件,这些条件往往是优化方向的来源。
  7. SORT: SORT是做排序操作时使用到的操作符。
  8. HAGR:HASH AGR操作,是最基础的分组方式,对于没有优化条件的分组语句,一般都会按这种方式进行分组,分组原理和HASH INNER JOIN 的方式类似,将原表数据取出,每个计算FOLD,发现有FOLD相同,且满足后续条件的合并为一组。
  9. SAGR: SORTED AGR操作,不同于HASH AGR,由于下层数据有序,同一分组的数据按照顺序取出就行,节省了大量的计算。

如果只看这些操作符,我们只能判断这些操作符使用是否正确,但不能知道每个操作符执行的时间。 http://www.cndba.cn/dave/article/116404

http://www.cndba.cn/dave/article/116404

而ET 工具,就是这个补充,ET 工具用来统计执行 ID 为 ID_IN 的所有操作符的执行时间。对于分析优化SQL提供比较直观的数据依据。在达梦 SQL 手册里对ET 有说明。

如果某些操作符并没有真正执行或者耗时很短,则不会在 ET 中显示。另外, 结果中出现了 EXPLAIN 计划中没有的 DLCK 操作符,它是用来对字典对象的上锁处理,通常情况下可以忽略。

2 ET 使用示例

2.1 启用ET

默认情况下,不启用ET功能,启用ET 需要设置如下3个参数:

http://www.cndba.cn/dave/article/116404

ENABLE_MONITOR=1、MONITOR_TIME=1 和 MONITOR_SQL_EXEC=1。

SQL> select para_name,para_value,para_type from v$dm_ini where para_name in ('ENABLE_MONITOR','MONITOR_TIME','MONITOR_SQL_EXEC');

行号     PARA_NAME        PARA_VALUE PARA_TYPE
---------- ---------------- ---------- ---------
1          ENABLE_MONITOR   1          SYS
2          MONITOR_TIME     1          SYS
3          MONITOR_SQL_EXEC 0          SESSION

已用时间: 5.097(毫秒). 执行号:500.
SQL>

我们在之前的博客,介绍了达梦查看和修改参数的方法如下:http://www.cndba.cn/dave/article/116404http://www.cndba.cn/dave/article/116404

DM7 达梦数据库 参数 修改方法
https://www.cndba.cn/dave/article/3578

通过刚才的查询,可以知道默认情况下,ENABLE_MONITOR和MONITOR_TIME 就是1,所以我们只需要设置 MONITOR_SQL_EXEC 参数即可,并且该参数还是个动态参数,修改不需要重启实例。 http://www.cndba.cn/dave/article/116404

http://www.cndba.cn/dave/article/116404
http://www.cndba.cn/dave/article/116404

SQL> SP_SET_PARA_VALUE(1,'MONITOR_SQL_EXEC',1);
DMSQL 过程已成功完成
已用时间: 3.646(毫秒). 执行号:501.
SQL>  select para_name,para_value,para_type from v$dm_ini where para_name in ('ENABLE_MONITOR','MONITOR_TIME','MONITOR_SQL_EXEC');

行号     PARA_NAME        PARA_VALUE PARA_TYPE
---------- ---------------- ---------- ---------
1          ENABLE_MONITOR   1          SYS
2          MONITOR_TIME     1          SYS
3          MONITOR_SQL_EXEC 1          SESSION

已用时间: 4.101(毫秒). 执行号:502.
SQL>

关闭该参数:
SP_SET_PARA_VALUE(1,'MONITOR_SQL_EXEC',0);

2.2 使用ET

在上节我们已经启用了ET,我们这里看ET的使用。

http://www.cndba.cn/dave/article/116404

查看执行计划:

SQL> explain SELECT  T1.NAME, T2.NAME FROM PRODUCTION.PRODUCT_CATEGORY T1 LEFT OUTER JOIN PRODUCTION.PRODUCT_SUBCATEGORY T2 ON T1.PRODUCT_CATEGORYID = T2.PRODUCT_CATEGORYID;

1   #NSET2: [1, 40, 52]
2     #PRJT2: [1, 40, 52]; exp_num(2), is_atom(FALSE)
3       #HASH LEFT JOIN2: [1, 40, 52]; key_num(1), partition_keys_num(0), ret_null(0), mix(0) KEY(T1.PRODUCT_CATEGORYID=T2.PRODUCT_CATEGORYID)
4         #CSCN2: [1, 7, 52]; INDEX33555489(PRODUCT_CATEGORY as T1)
5         #CSCN2: [1, 40, 52]; INDEX33555491(PRODUCT_SUBCATEGORY as T2)

已用时间: 1.007(毫秒). 执行号:0.
SQL>

SQL> SELECT  T1.NAME, T2.NAME FROM PRODUCTION.PRODUCT_CATEGORY T1 LEFT OUTER JOIN PRODUCTION.PRODUCT_SUBCATEGORY T2 ON T1.PRODUCT_CATEGORYID = T2.PRODUCT_CATEGORYID;

行号     NAME   NAME
---------- ------ ------------------
1          小说 世界名著
……
39         少儿 少儿英语
40         金融 NULL

40 rows got

已用时间: 2.738(毫秒). 执行号:503.
SQL>

在使用et之前,必须先执行一次SQL,拿到执行号:503。

http://www.cndba.cn/dave/article/116404

然后调用et:

SQL> et(503);

行号     OP    TIME(US)             PERCENT RANK                 SEQ         N_ENTER     HASH_USED_CELLS      HASH_CONFLICT
---------- ----- -------------------- ------- -------------------- ----------- ----------- -------------------- --------------------
1          PRJT2 3                    0.15%   6                    2           6           0                    0
2          DLCK  4                    0.20%   5                    0           2           0                    0
3          CSCN2 12                   0.60%   4                    5           2           0                    0
4          CSCN2 30                   1.51%   3                    4           2           0                    0
5          NSET2 76                   3.83%   2                    1           4           0                    0
6          HLO2  1860                 93.70%  1                    3           7           7                    0

6 rows got

已用时间: 17.711(毫秒). 执行号:504.
SQL>

ET结果中每一行对应一个操作符,每一列对应的解释如下:

  1. OP : 操作符名称
  2. TIME(US) : 执行耗时,以微秒为单位
  3. PERCENT RANK : 在整个计划中用时占比
  4. SEQ : 计划中的序号
  5. N_ENTER :操作符进入的次数

然后就可以与执行计划对应起来看了。

版权声明:本文为博主原创文章,未经博主允许不得转载。

用户评论
* 以下用户言论只代表其个人观点,不代表CNDBA社区的观点或立场
dave

dave

关注

人的一生应该是这样度过的:当他回首往事的时候,他不会因为虚度年华而悔恨,也不会因为碌碌无为而羞耻;这样,在临死的时候,他就能够说:“我的整个生命和全部精力,都已经献给世界上最壮丽的事业....."

  • 2262
    原创
  • 3
    翻译
  • 579
    转载
  • 192
    评论
  • 访问:8092048次
  • 积分:4350
  • 等级:核心会员
  • 排名:第1名
精华文章
    最新问题
    查看更多+
    热门文章
      热门用户
      推荐用户
        Copyright © 2016 All Rights Reserved. Powered by CNDBA · 皖ICP备2022006297号-1·

        QQ交流群

        注册联系QQ