联系:QQ(5163721)
标题:SPA(SQL性能分析器)的使用-2-Unpack STS和生成SPA Report
作者:Lunar©版权所有[文章允许转载,但必须以链接方式注明源地址,否则追究法律责任.]
SPA(SQL性能分析器)的使用-1-收集和迁移SQL Tuning Set
SPA(SQL性能分析器)的使用-2-Unpack STS和生成SPA Report
1,查看当前STS中的SQL数量:
09:52:42 LUNAR@ lunardb> select count(*) from LUNAR.SQLSET_TAB_LUNAR; COUNT(*) ---------- 496641 Elapsed: 00:00:00.24 09:53:13 LUNAR@ lunardb>
删除一些没用的:
10:04:15 LUNAR@ lunardb> delete from LUNAR.SQLSET_TAB_LUNAR 10:07:33 2 where (PARSING_SCHEMA_NAME in ('LUNAR', 'GGUSR','EXFSYS','SYS') ) 10:07:33 3 or ( module in ('PL/SQL Developer','SQL*Plus','sqlplus.exe','plsqldev.exe','DBMS_SCHEDULER') ); 701 rows deleted. Elapsed: 00:00:00.96 10:07:34 LUNAR@ lunardb> commit; Commit complete. Elapsed: 00:00:00.00 10:07:38 LUNAR@ lunardb>
2,在新库创建Lunar_11201STS_LUNAR SQLSET集
create user LUNARSPA identified by LUNARSPA; grant connect,resource,dba to LUNARSPA; 10:24:41 LUNAR@ lunardb> 10:24:41 2 from dba_users 10:24:41 3 where username in ('LUNAR','LUNARSPA') 10:24:41 4 order by 1,2; USERNAME DEFAULT_TABLESPACE TEMPORARY_TABLESPACE ------------------------------ ------------------------------ ------------------------------ LUNAR USERS TEMP LUNARSPA USERS TEMP Elapsed: 00:00:00.03 10:24:42 LUNAR@ lunardb>
—(2)使用LUNAR用户,创建STS:Lunar_11204STS_LUNAR
10:24:42 LUNAR@ lunardb> conn LUNARSPA/LUNARSPA Connected. 10:25:33 LUNARSPA@ lunardb> exec DBMS_SQLTUNE.create_sqlset(sqlset_name => 'Lunar_11204STS_LUNAR'); PL/SQL procedure successfully completed. Elapsed: 00:00:00.05 10:25:40 LUNARSPA@ lunardb>
—(2)使用LUNARSPA用户,将源库的LUNAR.Lunar_11201STS_LUNAR的SQL优化器映射到LUNARSPA.Lunar_11204STS_LUNAR
10:28:24 LUNARSPA@ lunardb> select NAME,OWNER,CREATED,STATEMENT_COUNT FROM DBA_SQLSET; NAME OWNER CREATED STATEMENT_COUNT ------------------------------ ------------------------------ ------------------- --------------- Lunar_11204STS_LUNAR LUNARSPA 2015-04-19 10:25:40 0 Elapsed: 00:00:00.00 10:40:44 LUNARSPA@ lunardb> exec dbms_sqltune.remap_stgtab_sqlset(old_sqlset_name =>'Lunar_11201STS_LUNAR',old_sqlset_owner => 'LUNAR', new_sqlset_name => 'Lunar_11204STS_LUNAR',new_sqlset_owner => 'LUNARSPA', staging_table_name => 'SQLSET_TAB_LUNAR',staging_schema_owner => 'LUNAR'); PL/SQL procedure successfully completed. Elapsed: 00:00:09.39 10:41:06 LUNARSPA@ lunardb>
使用LUNARSPA用户执行remap:
BEGIN DBMS_SQLTUNE.unpack_stgtab_sqlset( sqlset_name => 'Lunar_11201STS_LUNAR', sqlset_owner => 'SPA', replace => TRUE, staging_table_name => 'SQLSET_TAB', staging_schema_owner => 'SPA'); END; / 11:21:16 LUNARSPA@ lunardb> select NAME,OWNER,CREATED,STATEMENT_COUNT FROM DBA_SQLSET; NAME OWNER CREATED STATEMENT_COUNT ------------------------------ ------------------------------ ------------------- --------------- Lunar_11204STS_LUNAR LUNARSPA 2015-04-19 11:19:04 6005 Elapsed: 00:00:00.01 11:21:19 LUNARSPA@ lunardb>
至此,SPA在新库的数据已经准备完毕,可以开始生成SPA报告了。
常见报告的就提步骤如下:
1)创建SPA任务
11:33:10 LUNARSPA@ lunardb> exec :sname := 'Lunar_11204STS_GPS'; exec :tname := 'SPA_LUNARTEST1'; PL/SQL procedure successfully completed. Elapsed: 00:00:00.01 11:33:10 LUNARSPA@ lunardb> PL/SQL procedure successfully completed. Elapsed: 00:00:00.00 11:33:10 LUNARSPA@ lunardb> exec :tname := DBMS_SQLPA.CREATE_ANALYSIS_TASK(sqlset_name => :sname, task_name => :tname); PL/SQL procedure successfully completed. Elapsed: 00:00:00.19 11:33:10 LUNARSPA@ lunardb>
2)生成11.2.0.1的SPA Trail,采用STS转化方式
begin DBMS_SQLPA.EXECUTE_ANALYSIS_TASK( task_name => 'SPA_LUNARTEST1', execution_type => 'CONVERT SQLSET', execution_name => 'CONVERT_11204G'); end; / 3)在11.2.0.4中测试执行,从性能数据生成SPA trial begin DBMS_SQLPA.EXECUTE_ANALYSIS_TASK( task_name => 'SPA_LUNARTEST1', execution_type => 'TEST EXECUTE', execution_name => 'EXEC_11204G'); end; /
5 执行比较任务(一般取Elapsed Time、CPU Time、Buffer Get等指标)
begin DBMS_SQLPA.EXECUTE_ANALYSIS_TASK( task_name => 'SPA_LUNARTEST1', execution_type => 'COMPARE PERFORMANCE', execution_name => 'Compare_elapsed_time', execution_params => dbms_advisor.arglist('execution_name1', 'CONVERT_11204G', 'execution_name2', 'EXEC_11204G', 'comparison_metric', 'elapsed_time') ); end; / begin DBMS_SQLPA.EXECUTE_ANALYSIS_TASK( task_name => 'SPA_LUNARTEST1', execution_type => 'COMPARE PERFORMANCE', execution_name => 'Compare_CPU_time', execution_params => dbms_advisor.arglist('execution_name1', 'CONVERT_11204G', 'execution_name2', 'EXEC_11204G', 'comparison_metric', 'CPU_TIME') ); end; / begin DBMS_SQLPA.EXECUTE_ANALYSIS_TASK( task_name => 'SPA_LUNARTEST1', execution_type => 'COMPARE PERFORMANCE', execution_name => 'Compare_BUFFER_GETS_time', execution_params => dbms_advisor.arglist('execution_name1', 'CONVERT_11204G', 'execution_name2', 'EXEC_11204G', 'comparison_metric', 'BUFFER_GETS') ); end; /
6 生成SPA报告
spool spa_report_elapsed_time.html SELECT dbms_sqlpa.report_analysis_task('SPA_LUNARTEST1', 'HTML', 'ALL','ALL', execution_name=>'Compare_elapsed_time',top_sql=>500) FROM dual; spool off; spool spa_report_CPU_time.html SELECT dbms_sqlpa.report_analysis_task('SPA_LUNARTEST1', 'HTML', 'ALL','ALL', execution_name=>'Compare_CPU_time',top_sql=>500) FROM dual; spool off; spool spa_report_buffer_time.html SELECT dbms_sqlpa.report_analysis_task('SPA_LUNARTEST1','HTML','ALL','ALL', execution_name=>'Compare_BUFFER_GETS_time',top_sql=>500) FROM dual; spool off; spool spa_report_elapsed_time_regressed.html SELECT dbms_sqlpa.report_analysis_task('SPA_LUNARTEST1', 'HTML', 'REGRESSED','ALL', execution_name=>'Compare_elapsed_time',top_sql=>500) FROM dual; spool off; spool spa_report_CPU_time_regressed.html SELECT dbms_sqlpa.report_analysis_task('SPA_LUNARTEST1', 'HTML', 'REGRESSED','ALL', execution_name=>'Compare_CPU_time',top_sql=>500) FROM dual; spool off; spool spa_report_buffer_time_regressed.html SELECT dbms_sqlpa.report_analysis_task('SPA_LUNARTEST1','HTML','REGRESSED','ALL', execution_name=>'Compare_BUFFER_GETS_time',top_sql=>500) FROM dual; spool off; spool spa_report_errors.html SELECT dbms_sqlpa.report_analysis_task('SPA_LUNARTEST1', 'HTML', 'errors','summary') FROM dual; spool off; spool spa_report_unsupport.html SELECT dbms_sqlpa.report_analysis_task('SPA_LUNARTEST1', 'HTML', 'unsupported','all') FROM dual; spool off;
生成的报告一般如下:
-rwxrwxrwx 1 oracle oracle 1850 Apr 19 21:33 report_spa.sh -rw-rw-r-- 1 oracle oracle 8498134 Apr 19 21:37 spa_report_elapsed_time.html -rw-rw-r-- 1 oracle oracle 8954773 Apr 19 21:41 spa_report_CPU_time.html -rw-rw-r-- 1 oracle oracle 7941640 Apr 19 21:44 spa_report_buffer_time.html -rw-rw-r-- 1 oracle oracle 38933 Apr 19 21:44 spa_report_elapsed_time_regressed.html -rw-rw-r-- 1 oracle oracle 61982 Apr 19 21:44 spa_report_CPU_time_regressed.html -rw-rw-r-- 1 oracle oracle 28886 Apr 19 21:44 spa_report_buffer_time_regressed.html -rw-rw-r-- 1 oracle oracle 15537 Apr 19 21:44 spa_report_errors.html -rw-rw-r-- 1 oracle oracle 58703 Apr 19 21:44 spa_report_unsupport.html -rw-rw-r-- 1 oracle oracle 18608938 Apr 19 21:44 report_spa.log [oracle@lunardb tmp]$