数据库单条sql优化
数据库单条sql优化 ( gbk9rh97z5jca )
1.用pl/sql工具执行如下语句 (system用户)
DECLARE
V_COUNT NUMBER;
V_TASK_NAME VARCHAR2(30) := 'TUNING_FOR_SQL14';
V_SQLSET_NAME VARCHAR2(30) := 'SQL_SET14';
V_CURSOR DBMS_SQLTUNE.SQLSET_CURSOR;
BEGIN
SELECT COUNT(1)
INTO V_COUNT
FROM DBA_ADVISOR_LOG A
WHERE A.TASK_NAME = V_TASK_NAME;
IF V_COUNT <> 0 THEN
DBMS_SQLTUNE.DROP_TUNING_TASK(TASK_NAME => V_TASK_NAME);
END IF;
SELECT COUNT(1)
INTO V_COUNT
FROM DBA_SQLSET A
WHERE A.NAME = V_SQLSET_NAME;
IF V_COUNT <> 0 THEN
DBMS_SQLTUNE.DROP_SQLSET(SQLSET_NAME => V_SQLSET_NAME);
END IF;
DBMS_SQLTUNE.CREATE_SQLSET(SQLSET_NAME => V_SQLSET_NAME,
DESCRIPTION => 'FROM USER,FROM SNAP');
OPEN V_CURSOR FOR
SELECT *
FROM (SELECT VALUE(P)
FROM TABLE(DBMS_SQLTUNE.SELECT_WORKLOAD_REPOSITORY(BEGIN_SNAP => 45795,
END_SNAP => 45796)) P
WHERE P.SQL_ID = 'gbk9rh97z5jca'
ORDER BY CPU_TIME DESC) ;
DBMS_SQLTUNE.LOAD_SQLSET(SQLSET_NAME => V_SQLSET_NAME,
POPULATE_CURSOR => V_CURSOR);
V_TASK_NAME := DBMS_SQLTUNE.CREATE_TUNING_TASK(TASK_NAME => V_TASK_NAME,
SQLSET_NAME => V_SQLSET_NAME,
RANK1 => 'CPU_TIME',
TIME_LIMIT => 300,
DESCRIPTION => 'TUNE SQLSET ORDERED BY CPU_TIME');
DBMS_SQLTUNE.EXECUTE_TUNING_TASK(V_TASK_NAME);
END;
/
2.待上面执行完成后执行如下内容获取调优建议
--获取调优建议
SELECT DBMS_SQLTUNE.REPORT_TUNING_TASK('TUNING_FOR_SQL14') FROM DUAL;
--调优建议脚本
SELECT DBMS_SQLTUNE.SCRIPT_TUNING_TASK('TUNING_FOR_SQL14') FROM DUAL;
-v1