达梦DM8 SQL优化之DBMS_SQLTUNE包使用方法

达梦DM8 SQL优化之DBMS_SQLTUNE包使用方法

1. 概述
        DBMS_SQLTUNE包提供一系列对实时SQL监控的方法。当SQL监控功能开启后,DBMS_SQLTUNE包可以实时监控SQL执行过程中的信息,包括:执行时间、执行代价、执行用户、统计信息等情况。

        SQL监控功能开启的方法是将 DM.INI 参数 ENABLE_MONITOR 和 MONITOR_SQL_EXEC 均设置为1。MPP环境下,当前节点执行的SQL,只能在当前节点查询监控报告,其他节点无法查询。

2. 相关方法
1) REPORT_SQL_MONITOR     --返回单个 SQL 的实时监控报告。
2) REPORT_SQL_MONITOR_LIST    --返回被监控 SQL 的概要信息列表。
3) CREATE_TUNING_TASK     --创建语句调优任务。
4) EXECUTE_TUNING_TASK     --执行语句调优任务。
5) REPORT_TUNING_TASK     --输出语句调优报告。
6) DROP_TUNING_TASK    --删除语句调优任务。

3. 示例
使用包内的过程和函数之前,如果还未创建过系统包。请先调用系统过程创建系统包。
SQL> SP_CREATE_SYSTEM_PACKAGES (1,'DBMS_SQLTUNE');
DMSQL 过程已成功完成
已用时间: 65.653(毫秒). 执行号:500.

3.1 例1:监控 SQL 语句。
1)开启 SQL 监控开关。
设置 DM.INI 参数 ENABLE_MONITOR 和 MONITOR_SQL_EXEC 为 1。
SQL> SP_SET_PARA_VALUE (1,'ENABLE_MONITOR',1);
DMSQL 过程已成功完成
已用时间: 5.274(毫秒). 执行号:501.
SQL> SP_SET_PARA_VALUE (1,'MONITOR_SQL_EXEC',1);
DMSQL 过程已成功完成
已用时间: 2.553(毫秒). 执行号:502.

2)执行 SQL 语句。
SQL> SELECT * FROM DBA_OBJECTS;
行号     OWNER OBJECT_NAME      SUBOBJECT_NAME OBJECT_ID DATA_OBJECT_ID OBJECT_TYPE CREATED                    
---------- ----- ---------------- -------------- --------- -------------- ----------- ---------------------------
           LAST_DDL_TIME               TIMESTAMP                   STATUS TEMPORARY GENERATED SECONDARY NAMESPACE EDITION_NAME
           --------------------------- --------------------------- ------ --------- --------- --------- --------- ------------
1387       SYS   UTL_URL          NULL           268436700 NULL           DSYNOM      2022-04-24 21:18:00.655064
           2022-04-24 21:18:00.000000  2022-04-24 21:18:00.000000  VALID  N         NULL      NULL      NULL      NULL

1388       SYS   V$RESOURCE_LIMIT NULL           268436595 NULL           DSYNOM      2022-04-24 21:17:59.099630
           2022-04-24 21:17:59.000000  2022-04-24 21:17:59.000000  VALID  N         NULL      NULL      NULL      NULL

1389       SYS   XCOL             NULL           268436663 NULL           DSYNOM      2022-04-24 21:18:00.159521
           2022-04-24 21:18:00.000000  2022-04-24 21:18:00.000000  VALID  N         NULL      NULL      NULL      NULL

行号     OWNER OBJECT_NAME      SUBOBJECT_NAME OBJECT_ID DATA_OBJECT_ID OBJECT_TYPE CREATED                    
---------- ----- ---------------- -------------- --------- -------------- ----------- ---------------------------
           LAST_DDL_TIME               TIMESTAMP                   STATUS TEMPORARY GENERATED SECONDARY NAMESPACE EDITION_NAME
           --------------------------- --------------------------- ------ --------- --------- --------- --------- ------------
1390       SYS   XCSR             NULL           268436662 NULL           DSYNOM      2022-04-24 21:18:00.159103
           2022-04-24 21:18:00.000000  2022-04-24 21:18:00.000000  VALID  N         NULL      NULL      NULL      NULL
1390 rows got
已用时间: 57.203(毫秒). 执行号:503.

SQL> SELECT * FROM DBA_USERS;
行号     USERNAME     USER_ID     PASSWORD ACCOUNT_STATUS LOCK_DATE EXPIRY_DATE                 DEFAULT_TABLESPACE
---------- ------------ ----------- -------- -------------- --------- --------------------------- ------------------
           DEFAULT_INDEX_TABLESPACE TEMPORARY_TABLESPACE CREATED                     PROFILE                         
           ------------------------ -------------------- --------------------------- --------------------------------
           INITIAL_RSRC_CONSUMER_GROUP EXTERNAL_NAME PASSWORD_VERSIONS EDITIONS_ENABLED AUTHENTICATION_TYPE
           --------------------------- ------------- ----------------- ---------------- -------------------
           NOWDATE                    
           ---------------------------
5          SYS          50331648    NULL     OPEN           NULL      NULL                        SYSTEM
           SYSTEM                   TEMP                 2022-04-24 21:17:58.082330  /dm8/dmdbms/data/dm02/SYSTEM.DBF
           NULL                        NULL          0                 Y                NDCT_DB_AUTHENT
           2022-05-26 15:35:45
已用时间: 23.265(毫秒). 执行号:504.
SQL> 
得到两条 SQL 语句的执行号 SQL_EXEC_ID 分别为 503 和 504。

3)查询 SQL 监控报告。
为了能够完整展示 SQL 监控报告,特使用 SET 命令将将 DIsql 环境变量 LONG 设置成一个较大值 999999。
SQL>SET LONG 999999
根据 SQL 执行号来查询监控报告。
SQL>SELECT DBMS_SQLTUNE.REPORT_SQL_MONITOR(SQL_EXEC_ID=503) FROM DUAL;

达梦DM8 SQL优化之DBMS_SQLTUNE包使用方法_第1张图片
SQL>SELECT DBMS_SQLTUNE.REPORT_SQL_MONITOR(SQL_EXEC_ID=504) FROM DUAL;

 达梦DM8 SQL优化之DBMS_SQLTUNE包使用方法_第2张图片

4)查询 SQL 监控报告链表。
SELECT DBMS_SQLTUNE.REPORT_SQL_MONITOR_LIST() FROM DUAL;

达梦DM8 SQL优化之DBMS_SQLTUNE包使用方法_第3张图片

3.2 例2: SQL语句调优。
准备数据表。
SQL> CREATE TABLE TEST(C1 INT);
SQL> INSERT INTO TEST VALUES(1);
SQL> INSERT INTO TEST VALUES(2);
SQL> INSERT INTO TEST VALUES(3);

1)创建语句调优任务。
SQL> DBMS_SQLTUNE.CREATE_TUNING_TASK('SELECT  C1  FROM  TEST', TASK_NAME=>'TASK1');
DMSQL 过程已成功完成
已用时间: 3.987(毫秒). 执行号:505.

2) 执行语句调优任务。
SQL> DBMS_SQLTUNE.EXECUTE_TUNING_TASK('TASK1');
DMSQL 过程已成功完成
已用时间: 5.648(毫秒). 执行号:506.

3) 输出语句调优报告。
--首先将环境变量 LONG 设置成一个较大值 999999,以保证完整显示调优报告
SQL> SET LONG 999999
SQL> SELECT DBMS_SQLTUNE.REPORT_TUNING_TASK('TASK1');
行号     DBMS_SQLTUNE.REPORT_TUNING_TASK('TASK1') 
---------- ---------------------------------------------------------------------------------------------------------------------------
1          GENERAL INFORMATION SECTION
-------------------------------------------------------------------------------
TUNING TASK NAME    : TASK1
TUNING TASK OWNER   : SYSDBA
WORKLOAD TYPE       : SINGLE SQL STATEMENT
EXECUTION COUNT     : 1
CURRENT EXECUTION   : SYSEXECNAME_1
EXECUTION TYPE      : TUNE SQL
SCOPE               : COMPREHENSIVE
TIME LIMIT(SECONDS) : 1800
COMPLETION STATUS   : COMPLETED
STARTED AT          : 2022-05-26 15:55:06
COMPLETED AT        : 2022-05-26 15:55:06
SQL TEXT            : SELECT  C1  FROM  TEST
-------------------------------------------------------------------------------
FINDING SECTION (2 FINDING(S))
-------------------------------------------------------------------------------
  1 - STATISTICS FINDING
  ----------------------
    尚未分析表 SYSDBA.TEST。
    RECOMMENDATION
    --------------
    考虑收集此表的优化程序统计信息。
    CALL DBMS_STATS.GATHER_TABLE_STATS('SYSDBA', 'TEST');
  2 - INDEX FINDING
  -----------------
    通过创建一个或多个索引可以改进此语句的执行计划。
    RECOMMENDATION
    --------------
    考虑运行创建推荐的索引。
    CREATE INDEX IDX$$_1 ON "SYSDBA"."TEST"("C1");
-------------------------------------------------------------------------------
已用时间: 2.473(毫秒). 执行号:507.
SQL> 

四 删除语句调优任务。
SQL> DBMS_SQLTUNE.DROP_TUNING_TASK('TASK1');
DMSQL 过程已成功完成
已用时间: 4.757(毫秒). 执行号:508.
 

达梦数据库社区地址:https://eco.dameng.com/

你可能感兴趣的:(达梦数据库,数据库,database)