1、DBMS_SQLTUNE 包介绍
DBMS_SQLTUNE系统包兼容Oracle的DBMS_SQLTUNE包的部分功能,提供一系列对实时SQL监控的方法。DBMS_SQLTUNE 包可以实时监控 SQL 执行过程中的信息,包括:执行时间、执行代价、执行用户、统计信息、生成调优建议等功能。
2、使用限制和方法
2.1 测试环境介绍
操作系统:Kylin V10
数据库版本:dm8
2.2使用前置条件
1)先调用系统过程创建系统包
SP_CREATE_SYSTEM_PACKAGES (1,'DBMS_SQLTUNE');
2)开启SQL监控参数
SP_SET_PARA_VALUE (1,'ENABLE_MONITOR',1);
SP_SET_PARA_VALUE (1,'MONITOR_SQL_EXEC',1);
2.2 调优示例
--测试数据准备
CREATE TABLE TEST_SQLTUNE (C1 INT,C2 VARCHAR(20));
INSERT INTO TEST_SQLTUNE SELECT LEVEL,'TEST' ||LEVEL FROM DUAL CONNECT BY LEVEL <=10000;
COMMIT;
SELECT C1,C2 FROM TEST_SQLTUNE;
--执行SQL 语句
SELECT C1 FROM TEST_SQLTUNE; --记录执行号:823
--查询SQL监控报告
SELECT DBMS_SQLTUNE.REPORT_SQL_MONITOR(SQL_EXEC_ID=>823) FROM DUAL;
备注:可以看到C1列并没有创建索引,查询走全表扫描。
下面我们利用工具看是否能给我们一些建议呢?
--创建调优任务
DBMS_SQLTUNE.CREATE_TUNING_TASK('SELECT C1 FROM TEST_SQLTUNE',TASK_NAME=>'TEST_SQLTUNE');
--执行调优任务
DBMS_SQLTUNE.EXECUTE_TUNING_TASK('TEST_SQLTUNE');
--生成调优报告
SET LONG 999999 --将LONG设置成999999,以保证完整显示调优报告
SELECT DBMS_SQLTUNE.REPORT_TUNING_TASK('TEST_SQLTUNE');
--根据建议我们来试试,索引名字根据实际情况改
CREATE INDEX IDX$$_1 ON "SYSDBA"."TEST_SQLTUNE"("C1");
--再次运行一次调优报告
SELECT DBMS_SQLTUNE.REPORT_TUNING_TASK('TEST_SQLTUNE');
备注:可以看到此时我们的SQL已经最优效果。
--关闭调优任务
DBMS_SQLTUNE.DROP_TUNING_TASK('TEST_SQLTUNE');
3、DBMS_SQLTUNE包使用总结:
1)当表从未收集过统计信息情况,自动给出收集统计信息语句;
2)当表无任务索引情况,自动生成索引的创建语句,根据实际情况选择索引创建。
文章
阅读量
获赞