达梦数据库慢SQL分析利器:关键信息一键采集

01

背景

在数据库运维过程中,当出现SQL语句执行效率低下时,精准定位性能瓶颈的关键在于全面获取语句运行时信息。传统人工排查需要手动收集执行计划、系统资源、锁等待、索引状态等多维度数据,过程繁琐且易遗漏。为此编写自动化采集脚本工具,可一键式捕获包括SQL执行计划、耗时统计、表结构等关键诊断信息。通过标准化输出报告,提升了性能分析效率,为后续的SQL优化提供完整的数据支撑。

02

脚本功能说明

目前SQL脚本实现功能如下。CREATEOR REPLACE PACKAGE DM_SQL_RPT AS–获取所有PROCEDURE GET_ALL_INFO(EXEC_ID INBIGINT);–获取SQL涉及表信息PROCEDURE GET_TAB_INFO(EXEC_ID INBIGINT);–获取表涉及索引PROCEDURE GET_IDX_INFO(EXEC_ID INBIGINT);–获取SQL涉及表的统计信息PROCEDURE GET_STAT_INFO(EXEC_ID INBIGINT);–获取SQL执行计划PROCEDURE GET_SQL_PLAN(EXEC_ID INBIGINT);–获取et信息PROCEDURE GET_SQLET_INFO(EXEC_ID INBIGINT);–获取SQL缓存的执行计划PROCEDURE GET_SQLPLN_CACHE(EXEC_ID INBIGINT);END DM_SQL_RPT;ps:脚本工具在公众号回复关键字:SQL信息一键采集脚本,即可获取工具

03

使用示例

提供的这个示例即为完整过程

1. 将脚本的SQL语句放到数据库中执行

2. disql工具中开启MONITOR_SQL_EXEC参数

3. 开启set serveroutput on

4. 执行慢SQL

5. 执行脚本中包的功能函数

此时会输出SQL的关联表的信息以及表字段和表的索引信息。最下面就是SQL的执行计划以及ET信息。

–disql登录,创建包后,开启 MONITOR_SQL_EXECSQL> SF_SET_SESSION_PARA_VALUE (MONITOR_SQL_EXEC1);DMSQL executed successfullyused time0.752(ms). Execute id is69801.–开启 set serveroutput on  SQL>set serveroutput on–执行问题SQL   SQL>select a.id,a.c1,b.c1 from test_left01 a  join test_left02 b on a.id=b.id;used time28.112(ms). Execute id is69803.–获得 SQL执行ID,调用脚本的存储过程”获取所有”   SQL>call DM_SQL_RPT.GET_ALL_INFO(69803);            ###################################################################################### TABLE INFO : SYSDBA.TEST_LEFT01———————————————————————————|     OWNER|   TABLE_NAME| NUM_ROWS|       LAST_ANALYZED| PARTITIONED| TEMPORARY|———————————————————————————|    SYSDBA|  TEST_LEFT01|NULL|NULL|NO|         N|———————————————————————————##### COLUMN INFO : SYSDBA.TEST_LEFT01———————————————————————————| COLUMN_ID|         COLUMN_NAME|         COLUMN_TYPE|  NULLABLE|    DEFAULT_VAL|———————————————————————————|1|                  ID|VARCHAR(100,0)|         Y|NULL||2|                  C1|INT(4,0)|         Y|NULL||3|                  C2|VARCHAR(100,0)|         Y|NULL|###################################################################################### TABLE INFO : SYSDBA.TEST_LEFT02———————————————————————————|     OWNER|   TABLE_NAME| NUM_ROWS|       LAST_ANALYZED| PARTITIONED| TEMPORARY|———————————————————————————|    SYSDBA|  TEST_LEFT02|NULL|NULL|NO|         N|———————————————————————————##### COLUMN INFO : SYSDBA.TEST_LEFT02———————————————————————————| COLUMN_ID|         COLUMN_NAME|         COLUMN_TYPE|  NULLABLE|    DEFAULT_VAL|———————————————————————————|1|                  ID|VARCHAR(100,0)|         N|NULL||2|                  C1|VARCHAR(100,0)|         Y|NULL||3|                  C2|VARCHAR(100,0)|         Y|NULL||4|                  C3|CLOB(2147483647,0)|         Y|NULL|———————————————————————————######################################################################################################### INDEX INFO : SYSDBA.TEST_LEFT01CREATEOR REPLACE  INDEX “SYSDBA”.”IX_TEST_LEFT01″ ON “SYSDBA”.”TEST_LEFT01″(“ID” ASC,”C1″ ASC) STORAGE(ON “MAIN”, CLUSTERBTR) ;—————————————————————————————————-|        ID|          INDEX_NAME|         COLUMN_NAME| COLUMN_POSITION|  DESCEND| TYPE| XTYPE| FLAG|—————————————————————————————————-|33555472|      IX_TEST_LEFT01|                  ID|1|ASC|   BT|   SEC|0||33555472|      IX_TEST_LEFT01|                  C1|2|ASC|   BT|   SEC|0|—————————————————————————————————-######################################################################################################### INDEX INFO : SYSDBA.TEST_LEFT02The index created bysystemis forbidden to indexdef.—————————————————————————————————-|        ID|          INDEX_NAME|         COLUMN_NAME| COLUMN_POSITION|  DESCEND| TYPE| XTYPE| FLAG|—————————————————————————————————-|33555474|       INDEX33555474|                  ID|1|ASC|   BT|17|5|—————————————————————————————————-CREATEOR REPLACE  INDEX “SYSDBA”.”IX_TEST_LEFT02″ ON “SYSDBA”.”TEST_LEFT02″(“ID” ASC,”C1″ ASC) STORAGE(ON “MAIN”, CLUSTERBTR) ;—————————————————————————————————-|        ID|          INDEX_NAME|         COLUMN_NAME| COLUMN_POSITION|  DESCEND| TYPE| XTYPE| FLAG|—————————————————————————————————-|33555475|      IX_TEST_LEFT02|                  ID|1|ASC|   BT|   SEC|0||33555475|      IX_TEST_LEFT02|                  C1|2|ASC|   BT|   SEC|0|—————————————————————————————————-##### TABLE STATS INFO : SYSDBA.TEST_LEFT01 STATISTICS IS NULL.##### TABLE STATS INFO : SYSDBA.TEST_LEFT02 STATISTICS IS NULL.###################################################################################################################################################### SQL PLAN INFO :————————————————————————————————————————————————-| SEQ| DEP|SQL_PLAN                                                                                                                             |————————————————————————————————————————————————-|1|0|#NSET2: [2,337,148]; CPU_COST:0; IO_COST:2||2|1|  #PRJT2: [2,337,148]; CPU_COST:0; IO_COST:2||3|2|    #NEST LOOP INDEX JOIN2: [2,337,148]; CPU_COST:0; IO_COST:2||4|3|      #SSCN: [1,337,52]; IX_TEST_LEFT01[is_global(0)](TEST_LEFT01 AS A); CPU_COST:0; IO_COST:1||5|3|      #BLKUP2: [2,1,48]; INDEX33555474(TEST_LEFT02 AS B); CPU_COST:2; IO_COST:0||6|4|        #SSEK2: [2,1,48]; SCAN_TYPE(ASC); INDEX33555474[is_global(0)](TEST_LEFT02 AS B); SCAN_RANGE[A.ID,A.ID]; CPU_COST:2; IO_COST:0|————————————————————————————————————————————————-######################################################################################################### SQL ET INFO :—————————————————————————————————-|     OP|TIME(MS)|PERCENT| RANK|  SEQ|N_ENTER|    MEM(KB)|   DISK(KB)| HASH_CELLS| HASH_CONFLICT|—————————————————————————————————-|   DLCK|0.03|0.07%|7|0|3|0|0|0|0||   SSCN|0.12|0.24%|6|4|3|0|0|0|0||  NSET2|6.62|13.00%|5|1|340|0|0|0|0||  PRJT2|7.28|14.30%|4|2|676|0|0|0|0||   IJI2|10.45|20.51%|3|3|1015|0|0|0|0||  SSEK2|11.01|21.62%|2|6|674|0|0|0|0|| BLKUP2|15.41|30.26%|1|5|1348|0|0|0|0|—————————————————————————————————-DMSQL executed successfullyused time75.953(ms). Execute id is69804.

近期文章

达梦数据库如何寻找主备集群内监视器的IP地址

达梦数据库新建实例后配置定时数据备份

达梦数据库配置定期收集统计信息任务(全攻略实操)

达梦数据库的归档模式管理(全攻略实操)

5分钟搞定!达梦数据库版本查询的那些事儿

— END —

特别说明:本文所述内容仅代表作者个人在现阶段技术认知下的观点,受限于DM8(2024Q4)版本,未来可能随版本技术迭代而调整更新,期待未来能与大家探讨更优解!

为防走失,也请各位顺手关注一下公众号“”

👇订阅下方合集,获取每日推送

# DM数据库优质内容汇总

# DM数据库SQL优化汇总

# DM数据库运维工具汇总

# DM数据库故障处理汇总

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部