记录一则完整的SPA(10g->11g)测试过程
|
生产端:Windows 2008 + Oracle 10.2.0.5
1.SPA测试流程为了尽可能的减小对正式生产库的性能影响,本次SPA测试只是从AWR资料库中的SQL数据转化而来的SQL Tuning Set进行整体的SQL性能测试。
2.SPA操作流程2.1 本文使用的命名规划 类型 规划 SQLSET ORCL_SQLSET_201806 Analysis Task SPA_TASK_201806 STGTAB ORCL_STSTAB_201806 Dmpfile ORCL_STSTAB_201806.dmp 2.2 生产端:环境准备 conn / as sysdba CREATE USER SPA IDENTIFIED BY SPA DEFAULT TABLESPACE SYSAUX; GRANT DBA TO SPA; GRANT ADVISOR TO SPA; GRANT SELECT ANY DICTIONARY TO SPA; GRANT ADMINISTER SQL TUNING SET TO SPA; 2.3 生产端:采集数据 SET LINES 188 PAGES 1000 COL SNAP_TIME FOR A22 COL MIN_ID NEW_VALUE MINID COL MAX_ID NEW_VALUE MAXID SELECT MIN(SNAP_ID) MIN_ID,MAX(SNAP_ID) MAX_ID FROM DBA_HIST_SNAPSHOT WHERE END_INTERVAL_TIME > trunc(sysdate)-10 ORDER BY 1; 2). 创建SQL Set --连接用户
conn SPA/SPA
--如果之前有这个SQLSET的名字,可以这样删除
EXEC DBMS_SQLTUNE.DROP_SQLSET (SQLSET_NAME => ‘ORCL_SQLSET_201806‘,SQLSET_OWNER => ‘SPA‘);
--新建SQLSET:ORCL_SQLSET_201806
EXEC DBMS_SQLTUNE.CREATE_SQLSET ( -
SQLSET_NAME => ‘ORCL_SQLSET_201806‘,-
DESCRIPTION => ‘SQL Set Create at : ‘||TO_CHAR(SYSDATE,‘YYYY-MM-DD HH24:MI:SS‘),-
SQLSET_OWNER => ‘SPA‘);
3). 转化AWR数据中的SQL数据,将其中的SQL载入到SQL Set中 DECLARE
SQLSET_CUR DBMS_SQLTUNE.SQLSET_CURSOR;
BEGIN
OPEN SQLSET_CUR FOR
SELECT VALUE(P) FROM TABLE(
DBMS_SQLTUNE.SELECT_WORKLOAD_REPOSITORY( 16,24,‘PARSING_SCHEMA_NAME NOT IN (‘‘SYS‘‘,‘‘SYSTEM‘‘)‘,NULL,1,‘ALL‘)) P;
DBMS_SQLTUNE.LOAD_SQLSET(
SQLSET_NAME => ‘ORCL_SQLSET_201806‘,SQLSET_OWNER => ‘SPA‘,POPULATE_CURSOR => SQLSET_CUR,LOAD_OPTION => ‘MERGE‘,UPDATE_OPTION => ‘ACCUMULATE‘);
CLOSE SQLSET_CUR;
END;
/
4). 打包SQL Set DROP TABLE SPA.JYZHAO_SQLSETTAB_20180106;
EXEC DBMS_SQLTUNE.CREATE_STGTAB_SQLSET (‘ORCL_STSTAB_201806‘,‘SPA‘,‘SYSAUX‘);
EXEC DBMS_SQLTUNE.PACK_STGTAB_SQLSET ( -
SQLSET_NAME => ‘ORCL_SQLSET_201806‘,-
SQLSET_OWNER => ‘SPA‘,-
STAGING_TABLE_NAME => ‘ORCL_STSTAB_201806‘,-
STAGING_SCHEMA_OWNER => ‘SPA‘);
2.4 生产端:导出数据 cat > ./export_sqlset_201806.par <<EOF USERID=‘SPA/SPA‘ FILE=ORCL_STSTAB_201806.dmp LOG=exp_spa_sqlset_201806.log TABLES=ORCL_STSTAB_201806 DIRECT=N BUFFER=10240000 STATISTICS=NONE EOF 注意:这里DIRECT=Y参数在遇到问题后尝试改为了DIRECT=N,默认也是N。 set NLS_LANG=AMERICAN_AMERICA.US7ASCII exp PARFILE=export_sqlset_201806.par 注意:NLS_LANG变量是Oracle的变量,设置字符集和数据库字符集一致,避免发生错误转换。 2). 将导出后的Dump文件传输到测试服务器 2.5 测试端:环境准备 conn / as sysdba CREATE USER SPA IDENTIFIED BY SPA DEFAULT TABLESPACE SYSAUX; GRANT DBA TO SPA; GRANT ADVISOR TO SPA; GRANT SELECT ANY DICTIONARY TO SPA; GRANT ADMINISTER SQL TUNING SET TO SPA; 2.6 测试端:测试准备 cat > ./import_sqlset_201806.par <<EOF USERID=‘SPA/SPA‘ FILE=ORCL_STSTAB_201806.dmp LOG=imp_spa_sqlset_201806.log FULL=Y EOF export NLS_LANG=AMERICAN_AMERICA.US7ASCII imp PARFILE=import_sqlset_201806.par 2). 解包(unpack)SQL Set conn SPA/SPA
EXEC DBMS_SQLTUNE.UNPACK_STGTAB_SQLSET (-
SQLSET_NAME => ‘ORCL_SQLSET_201806‘,-
REPLACE => TRUE,-
STAGING_SCHEMA_OWNER => ‘SPA‘);
3). 创建SPA分析任务 VARIABLE SPA_TASK VARCHAR2(64);
EXEC :SPA_TASK := DBMS_SQLPA.CREATE_ANALYSIS_TASK( -
TASK_NAME => ‘SPA_TASK_201806‘,-
DESCRIPTION => ‘SPA Analysis task at : ‘||TO_CHAR(SYSDATE,-
SQLSET_NAME => ‘ORCL_SQLSET_201806‘,-
SQLSET_OWNER => ‘SPA‘);
2.7 测试端:前期性能 EXEC DBMS_SQLPA.EXECUTE_ANALYSIS_TASK( -
TASK_NAME => ‘SPA_TASK_201806‘,-
EXECUTION_NAME => ‘EXEC_10G_201806‘,-
EXECUTION_TYPE => ‘CONVERT SQLSET‘,-
EXECUTION_DESC => ‘Convert 10g SQLSET for SPA Task at : ‘||TO_CHAR(SYSDATE,‘YYYY-MM-DD HH24:MI:SS‘));
2.8 测试端:后期性能 vi spa2.sh
echo "WARNING: SPA2 Start @`date`"
sqlplus SPA/SPA << EOF!
EXEC DBMS_SQLPA.EXECUTE_ANALYSIS_TASK( -
TASK_NAME => ‘SPA_TASK_201806‘,-
EXECUTION_NAME => ‘EXEC_11G_201806‘,-
EXECUTION_TYPE => ‘TEST EXECUTE‘,-
EXECUTION_DESC => ‘Execute SQL in 11g for SPA Task at : ‘||TO_CHAR(SYSDATE,‘YYYY-MM-DD HH24:MI:SS‘));
exit
EOF!
echo "WARNING:SPA2 OK @`date`"
nohup sh spa2.sh &
2.9 测试端:性能对比 1). 对比两次Trail中的SQL执行时间 conn SPA/SPA
EXEC DBMS_SQLPA.EXECUTE_ANALYSIS_TASK( -
TASK_NAME => ‘SPA_TASK_201806‘,-
EXECUTION_NAME => ‘COMPARE_ET_201806‘,-
EXECUTION_TYPE => ‘COMPARE PERFORMANCE‘,-
EXECUTION_PARAMS => DBMS_ADVISOR.ARGLIST( -
‘COMPARISON_METRIC‘,‘ELAPSED_TIME‘,-
‘EXECUTE_FULLDML‘,‘TRUE‘,-
‘EXECUTION_NAME1‘,‘EXEC_10G_201806‘,-
‘EXECUTION_NAME2‘,‘EXEC_11G_201806‘),-
EXECUTION_DESC => ‘Compare SQLs between 10g and 11g at :‘||TO_CHAR(SYSDATE,‘YYYY-MM-DD HH24:MI:SS‘));
2). 对比两次Trail中的SQL执行的CPU时间 EXEC DBMS_SQLPA.EXECUTE_ANALYSIS_TASK( -
TASK_NAME => ‘SPA_TASK_201806‘,-
EXECUTION_NAME => ‘COMPARE_CT_201806‘,‘CPU_TIME‘,‘YYYY-MM-DD HH24:MI:SS‘));
3). 对比两次Trail中的SQL执行的逻辑读 EXEC DBMS_SQLPA.EXECUTE_ANALYSIS_TASK( -
TASK_NAME => ‘SPA_TASK_201806‘,-
EXECUTION_NAME => ‘COMPARE_BG_201806‘,‘BUFFER_GETS‘,‘YYYY-MM-DD HH24:MI:SS‘));
2.10 测试端:汇总报告 a) 获取执行时间全部报告 conn SPA/SPA ALTER SESSION SET EVENTS=‘31156 TRACE NAME CONTEXT FOREVER,LEVEL 0X400‘; SET LINES 1111 PAGES 50000 LONG 1999999999 TRIM ON TRIMS ON SERVEROUTPUT ON SIZE UNLIMITED SPOOL elapsed_all.html SELECT XMLTYPE(DBMS_SQLPA.REPORT_ANALYSIS_TASK(‘SPA_TASK_201806‘,‘HTML‘,‘ALL‘,1000,‘COMPARE_ET_201806‘)).GETCLOBVAL(0,0) FROM DUAL; spool off b) 获取执行时间下降报告 ALTER SESSION SET EVENTS=‘31156 TRACE NAME CONTEXT FOREVER,LEVEL 0X400‘; SET LINES 1111 PAGES 50000 LONG 1999999999 TRIM ON TRIMS ON SERVEROUTPUT ON SIZE UNLIMITED SPOOL elapsed_regressed.html SELECT XMLTYPE(DBMS_SQLPA.REPORT_ANALYSIS_TASK(‘SPA_TASK_201806‘,‘REGRESSED‘,0) FROM DUAL; spool off c) 获取逻辑读全部报告 ALTER SESSION SET EVENTS=‘31156 TRACE NAME CONTEXT FOREVER,LEVEL 0X400‘; SET LINES 1111 PAGES 50000 LONG 1999999999 TRIM ON TRIMS ON SERVEROUTPUT ON SIZE UNLIMITED SPOOL buffer_all.html SELECT XMLTYPE(DBMS_SQLPA.REPORT_ANALYSIS_TASK(‘SPA_TASK_201806‘,‘COMPARE_BG_201806‘)).GETCLOBVAL(0,0) FROM DUAL; spool off d) 获取逻辑读下降报告 ALTER SESSION SET EVENTS=‘31156 TRACE NAME CONTEXT FOREVER,LEVEL 0X400‘; SET LINES 1111 PAGES 50000 LONG 1999999999 TRIM ON TRIMS ON SERVEROUTPUT ON SIZE UNLIMITED SPOOL buffer_regressed.html SELECT XMLTYPE(DBMS_SQLPA.REPORT_ANALYSIS_TASK(‘SPA_TASK_201806‘,0) FROM DUAL; spool off e) 获取错误报告 ALTER SESSION SET EVENTS=‘31156 TRACE NAME CONTEXT FOREVER,LEVEL 0X400‘; SET LINES 1111 PAGES 50000 LONG 1999999999 TRIM ON TRIMS ON SERVEROUTPUT ON SIZE UNLIMITED SPOOL error.html SELECT XMLTYPE(DBMS_SQLPA.REPORT_ANALYSIS_TASK(‘SPA_TASK_201806‘,‘ERRORS‘,0) FROM DUAL; spool off f) 获取不支持报告 ALTER SESSION SET EVENTS=‘31156 TRACE NAME CONTEXT FOREVER,LEVEL 0X400‘; SET LINES 1111 PAGES 50000 LONG 1999999999 TRIM ON TRIMS ON SERVEROUTPUT ON SIZE UNLIMITED SPOOL unsupported.html SELECT XMLTYPE(DBMS_SQLPA.REPORT_ANALYSIS_TASK(‘SPA_TASK_201806‘,‘UNSUPPORTED‘,0) FROM DUAL; spool off g) 获取执行计划变化报告 ALTER SESSION SET EVENTS=‘31156 TRACE NAME CONTEXT FOREVER,LEVEL 0X400‘; SET LINES 1111 PAGES 50000 LONG 1999999999 TRIM ON TRIMS ON SERVEROUTPUT ON SIZE UNLIMITED SPOOL changed_plans.html SELECT XMLTYPE(DBMS_SQLPA.REPORT_ANALYSIS_TASK(‘SPA_TASK_201806‘,‘CHANGED_PLANS‘,0) FROM DUAL; spool off 3.SPA环境清理3.1 查看SQLSET conn SPA/SPA select owner,name,STATEMENT_COUNT from dba_sqlset; 3.2 查看分析任务 select owner,task_id,task_name,created,LAST_MODIFIED,STATUS from DBA_ADVISOR_TASKS where task_name like upper(‘%&task_name%‘) order by 2; SPA_TASK_201806 3.3 删除ANALYSIS_TASK exec dbms_sqlpa.DROP_ANALYSIS_TASK(‘SPA_TASK_201806‘); 3.4 删除sqlset exec dbms_sqltune.DROP_SQLSET(‘ORCL_SQLSET_201806‘); 如果删除时出现异常情况"ORA-13757",提示STS是活动的,可以尝试使用下面SQL修改后再进行删除。 delete from wri$_sqlset_references
where sqlset_id in (select id
from wri$_sqlset_definitions
where name in (‘ORCL_SQLSET_201806‘,‘ORCL_SQLSET_201806‘));
commit;
3.5 删除用户 drop user spa cascade; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
