达梦数据库获取SQL实际执行计划方法详细介绍

 更新时间:2022年10月10日 14:45:35   作者:Jackin_Hu  
在达梦数据库中,使用EXPLAIN语句可以查看sql的执行计划,但EXPLAIN只生成执行计划,并不会真正执行SQL语句,因此产生的执行计划有可能不准。本章将带领大家了解多种获取SQL实际的执行计划的方法

环境说明:

操作系统:银河麒麟V10

数据库:DM8

相关关键字:DM数据库、SQL实际执行计划

一、set autotrace trace

disql下执行set autotrace trace开启AUTOTRACE功能,执行SQL语句,并打印实际的执行计划。

SQL> set autotrace trace
SQL> select a.employee_name, b.department_name from dmtest.t_emp a join dmtest.t_dept b on a.department_id = b.department_id and b.department_id=102;

二、v$cachepln中获取执行计划

v$cachepln中保存了SQL缓冲区中的执行计划信息,在ini参数USE_PLN_POOL !=0时才统计。根据v$cachepln中的cache_item可以获取实际执行计划信息:

SQL> select cache_item, sqlstr from v$cachepln where sqlstr like 'select a.employee_name, b.department_name from dmtest.t_emp a join dmtest.t_dept b on a.department_id = b.department_id and b.department_id=102%'; 
SQL> alter session set events 'immediate trace name plndump level 140244262459496, dump_file ''/opt/dm/sqlplntest.log''';

查看dump的执行计划信息:

三、ET系统函数

ET函数统计对应执行ID的所有操作符的执行时间。使用ET函数需设置INI参数ENABLE_MONITOR=1、MONITOR_TIME=1和MONITOR_SQL_EXEC=1。

查看参数信息:

SQL>select name, type, value from v$parameter t where name in('ENABLE_MONITOR','MONITOR_SQL_EXEC','MONITOR_TIME');
行号  NAME             TYPE    VALUE
---- ------ ---------------- ------- -----
1 ENABLE_MONITOR   SYS     1
2 MONITOR_TIME     SYS     1
3 MONITOR_SQL_EXEC SESSION 0

设置当前会话MONITOR_SQL_EXEC参数为1,并执行sql语句:

SQL> alter session set 'MONITOR_SQL_EXEC'=1;

使用ET获取上述执行号为1124的SQL语句的执行计划和执行时间:

四、dbms_sqltune系统包

DBMS_SQLTUNE系统包兼容Oracle的DBMS_SQLTUNE包的部分功能,提供一系列对实时SQL监控的方法。

当SQL监控功能开启后,DBMS_SQLTUNE包可以实时监控SQL执行过程中的信息,包括:执行时间、执行代价、执行用户、统计信息等情况。使用DBMS_SQLTUNE也需要将DM.INI参数ENABLE_MONITOR、MONITOR_TIME、MONITOR_SQL_EXEC设置为1。

使用DBMS_SQLTUNE.REPORT_SQL_MONITOR方法可以查看上述执行号为1124的执行计划信息。

SQL> set long 100000
SQL> SELECT DBMS_SQLTUNE.REPORT_SQL_MONITOR(SQL_EXEC_ID=>1124);

如下图所示,可以看到此方法获取的执行计划比ET函数更详细。

五、说明

1、set autotrace trace和v$cachepln不需要开启其他额外参数,默认就可以使用该方法获取sql语句的执行计划,不同的是set autotrace trace需要等待SQL语句执行完成才会打印执行计划;而通过v$cachepln在语句解析生成执行计划后就可以查询该SQL的执行计划;

2、使用ET函数和dbms_sqltune系统包也需要SQL语句执行完成,并且需要保证ENABLE_MONITOR、MONITOR_TIME、MONITOR_SQL_EXEC三个参数为开启状态才能查看对应SQL的实际执行计划信息,其中,dbms_sqltune执行计划更详细。

到此这篇关于达梦数据库获取SQL实际执行计划方法详细介绍的文章就介绍到这了,更多相关获取SQL实际执行计划内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Ubuntu15下mysql5.6.25不支持中文的解决办法

    Ubuntu15下mysql5.6.25不支持中文的解决办法

    Ubuntu15下mysql5.6.25出现乱码,不支持中文,该问题如何解决呢?下面看看小编是怎么解决此问题的,需要的朋友可以参考下
    2015-09-09
  • mysql5.7安装及配置教程

    mysql5.7安装及配置教程

    这篇文章主要为大家详细介绍了mysql5.7安装及配置教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-11-11
  • SQL行列转置以及非常规的行列转置示例代码

    SQL行列转置以及非常规的行列转置示例代码

    转置即旋转数据表的横纵方向,常用来改变数据布局,以便用新的角度观察,下面这篇文章主要给大家介绍了关于SQL行列转置以及非常规行列转置的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-08-08
  • MySQL查询倒数第二条记录实现方法

    MySQL查询倒数第二条记录实现方法

    这篇文章主要介绍了MySQL查询倒数第二条记录实现方法,本文直接给出代码实例,重要部分已经加红提示,需要的朋友可以参考下
    2015-05-05
  • mysql全量备份、增量备份实现方法

    mysql全量备份、增量备份实现方法

    这篇文章主要介绍了mysql全量备份、增量备份实现方法,需要的朋友可以参考下
    2016-12-12
  • mysql 全文检索中文解决方法及实例代码

    mysql 全文检索中文解决方法及实例代码

    这篇文章主要介绍了mysql 全文检索中文解决方法及实例代码的相关资料,需要的朋友可以参考下
    2017-02-02
  • MySql存储引擎的作用

    MySql存储引擎的作用

    mysql面试中最常问的问题之一:小伙子,你说一下你们公司用的存储引擎,以及你知道有哪些存储引擎和他们之间的区别? 所以下面这篇文章主要给大家介绍了关于Mysql存储引擎的相关资料,需要的朋友可以参考下
    2022-09-09
  • mysql授予用户远程访问权限的实现

    mysql授予用户远程访问权限的实现

    在默认情况下,MySQL 数据库仅允许在本地主机上进行访问,如果您需要远程连接到 MySQL 数据库,您需要授予用户远程访问权限,本文就来
    2023-11-11
  • MySQL学习第三天 Windows 64位操作系统下验证MySQL

    MySQL学习第三天 Windows 64位操作系统下验证MySQL

    MySQL学习第三天教大家如何在Windows 64位操作系统下验证MySQL,感兴趣的小伙伴们可以参考一下
    2016-05-05
  • 一文教会你在MySQL中使用DateTime

    一文教会你在MySQL中使用DateTime

    mysql数据库在我们的工作中经常需要使用,经常在表中需要使用时间,下面这篇文章主要给大家介绍了关于在MySQL中使用DateTime的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-09-09

最新评论