DBMS_SQLTUNE 包

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

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

40.1 相关方法

  1. REPORT_SQL_MONITOR

返回单个SQL的实时监控报告。

语法如下:

FUNCTION REPORT_SQL_MONITOR(
   SQL_ID					IN VARCHAR2		DEFAULT NULL,
   DBOP_NAME                 	IN VARCHAR2 	DEFAULT  NULL,
   DBOP_EXEC_ID             	IN INT			DEFAULT NULL,
   SESSION_ID                	IN BIGINT    	DEFAULT NULL,
   SESSION_SERIAL            	IN INT       	DEFAULT  NULL,
   SQL_EXEC_START            	IN DATETIME		DEFAULT  NULL,
   SQL_EXEC_ID                	IN INT       	DEFAULT  NULL,
   INST_ID                     	IN INT       	DEFAULT  NULL,
   START_TIME_FILTER         	IN DATETIME 	DEFAULT  NULL,
   END_TIME_FILTER           	IN DATETIME 	DEFAULT  NULL,
   INSTANCE_ID_FILTER        	IN INT       	DEFAULT  NULL,
   PARALLEL_FILTER           	IN VARCHAR2 	DEFAULT  NULL,
   PLAN_LINE_FILTER          	IN INT      		DEFAULT  NULL,
   EVENT_DETAIL              	IN VARCHAR2 	DEFAULT ‘YES',
   BUCKET_MAX_COUNT          	IN INT       	DEFAULT  128,
   BUCKET_INTERVAL           	IN INT       	DEFAULT  NULL,
   BASE_PATH                  	IN VARCHAR2 	DEFAULT  NULL,
   LAST_REFRESH_TIME         	IN DATETIME 	DEFAULT  NULL,
   REPORT_LEVEL               	IN VARCHAR2 	DEFAULT 'TYPICAL',
   TYPE                        	IN VARCHAR2 	DEFAULT 'TEXT',
   SQL_PLAN_HASH_VALUE      	IN INT     		DEFAULT  NULL,
   CON_NAME                   	IN VARCHAR2 	DEFAULT  NULL,
   REPORT_ID                  	IN INT      		DEFAULT  NULL)
 RETURN CLOB;

参数详解

  • SQL_ID

表示展示SQL_ID对应语句的监控报告。SQL_ID表示SQL语句编号,全局递增。相同SQL语句对应SQL_ID一般相同。
当SQL_ID为NULL时,表示返回最后一条被监控SQL的报告。

  • SESSION_ID

展示SESSION_ID指定会话的监控报告,默认为NULL。SESSION_ID表示SESSION地址信息,SESSION地址会重用,导致SESSION_ID相同。
SESSION_ID为-1表示当前会话。

  • SESSION_SERIAL

会话的唯一标识。全局递增的,不会重复。

  • SQL_EXEC_ID

表示展示SQL_EXEC_ID执行号对应语句的监控报告。SQL_EXEC_ID为SQL执行编号,全局递增。相同SQL语句多次执行,对应SQL_EXEC_ID也各不相同。

  • TYPE

监控报告格式。目前只支持文本“TEXT”格式,其它报错。

  • 其它参数

保留参数,暂时忽略,不进行合法性检查。

  1. REPORT_SQL_MONITOR_LIST

返回被监控SQL的概要信息列表。

语法如下:

FUNCTION REPORT_SQL_MONITOR_LIST(
   SQL_ID					IN VARCHAR2		DEFAULT NULL,
   SESSION_ID                	IN BIGINT   		DEFAULT NULL,
   SESSION_SERIAL            	IN INT       	DEFAULT  NULL,
   INST_ID                    	IN INT       	DEFAULT  NULL,
   ACTIVE_SINCE_DATE         	IN DATETIME 	DEFAULT  NULL,
   ACTIVE_SINCE_SEC          	IN INT       	DEFAULT  NULL,
   ACTIVE_BEFORE_DATE        	IN DATETIME		DEFAULT  NULL,
   LAST_REFRESH_TIME         	IN DATETIME 	DEFAULT  NULL,
   DBOP_NAME                  	IN VARCHAR2 	DEFAULT  NULL,
   MONITOR_TYPE               	IN INT       	DEFAULT  MONITOR_TYPE_ALL,
   MAX_SQLTEXT_LENGTH        	IN INT       	DEFAULT  NULL,
   TOP_N_COUNT                	IN INT       	DEFAULT  NULL,
   TOP_N_RANKBY               	IN VARCHAR2		DEFAULT  'LAST_ACTIVE_TIME',
   REPORT_LEVEL               	IN VARCHAR2		DEFAULT  'TYPICAL',
   AUTO_REFRESH               	IN INT       	DEFAULT  NULL,
   BASE_PATH                  	IN VARCHAR2		DEFAULT  NULL,
   TYPE                        	IN VARCHAR2		DEFAULT 'TEXT',
   CON_NAME                   	IN VARCHAR2 	DEFAULT  NULL,
   TOP_N_DETAIL_COUNT        	IN INT       	DEFAULT  NULL)
 RETURN CLOB;

参数详解

  • SQL_ID

表示展示SQL_ID对应语句的监控报告。当SQL_ID为NULL时,表示返回所有被监控SQL的报告。

  • SESSION_ID

展示SESSION_ID指定会话的监控报告,默认为NULL。SESSION_ID为-1表示当前会话。

  • SESSION_SERIAL

会话的唯一标识。

  • MAX_SQLTEXT_LENGTH SQL

文本的最大长度,默认为NULL表示没限制。SQL文本长度是字符长度,而不是字节长度。

  • TYPE

监控报告格式。目前只支持文本“TEXT”格式,其它报错。

  • 其它参数

暂时忽略,不进行合法性检查。

40.2 举例说明

使用包内的过程和函数之前,如果还未创建过系统包。请先调用系统过程创建系统包。

SP_CREATE_SYSTEM_PACKAGES (1,'DBMS_SQLTUNE');

例 展示DBMS_SQLTUNE包的使用流程。

第1步 开启SQL监控开关

设置DM.INI参数ENABLE_MONITOR和MONITOR_SQL_EXEC为1。

SQL>SP_SET_PARA_VALUE (1,'ENABLE_MONITOR',1);

SQL>SP_SET_PARA_VALUE (1,'MONITOR_SQL_EXEC',1);

第2步 执行SQL语句

SQL>select * FROM DBA_OBJECTS;

……

已用时间: 146.907(毫秒). 执行号:11

SQL>SELECT * FROM DBA_TABLES;

……

已用时间: 544.633(毫秒). 执行号:24.

得到两条SQL语句的执行号SQL_EXEC_ID分别为11和24。

第3步 查询SQL监控报告

为了能够完整展示SQL监控报告,特使用SET命令将将DIsql环境变量LONG设置成一个较大值999999。

SQL>SET LONG 999999

查询SQL监控报告。根据SQL执行号来查询监控报告。

SQL>select DBMS_SQLTUNE.REPORT_SQL_MONITOR(SQL_EXEC_ID=11) from dual;

或

SQL>select DBMS_SQLTUNE.REPORT_SQL_MONITOR(SQL_EXEC_ID=24) from dual;

第4步 查询SQL监控报告链表

select DBMS_SQLTUNE.REPORT_SQL_MONITOR_list() from dual;
微信扫码
分享文档
扫一扫
联系客服