点击上方“IT那活儿”,关注后了解更多精彩内容!!!

Oracle SPA概念



SQL性能分析器概要

1. 收集 SQL:在这个阶段中,将收集用于表示生产系统中的 SQL 工作量的 SQL 语句集。可以使用 SQL 优化集或自动工作量资料档案库 (AWR) 来捕获要传送的信息。因为 AWR 本质上是捕获高负载的 SQL,所以应考虑修改默认的 AWR 快照设置和捕获的顶级 SQL,以确保 AWR 捕获最大数量的 SQL 语句。这可以确保捕获更加完整的 SQL 工作量。
执行计划(如由解释计划生成的计划) 执行统计信息(如由占用时间、缓冲获取次数、磁盘读取次数和已处理的行数组成的信息)
Bug 10428438 : WITH EXECUTE_FULLDML ROWS IS ALWAYS SET TO 0 11.2.0.1Bug 14635522 : SPA SHOULD CAPTURE AND REPLAY TRANSACTIONS 11.2.0.3

实验环境

原库为11.2.0.4,目标库为11.2.0.4,向目标库迁移一个test表空间,在目标库中建立spa-sts,首先通过dblink在原库执行sql trial,然后在目标库执行SQL trial,最后比较两个SQL trial。这样就达到了对比迁移后SQL有无性能衰退情况。
CREATE USER SPA IDENTIFIED BY oracle;GRANT DBA TO SPA;
expdp \'/ as sysdba\' dumpfile=SCOTT.dmp directory=MYDUMPschemas=SCOTT logfile=scott.log cluster=no
3.3 目标端导入:
impdp \'/ as sysdba\' directory=DATA_PUMP_DIR dumpfile=SCOTT.DMPlogfile=SCOTT.log cluster=no
3.4 建立dblink方便传输SQLSET
create database link spa_link connect to spa identified by oracle using 'SOURCEDB';
3.5 源端建立SQLSET,连接到SPA账号:


源端AWR中的SQL载入到SQL SET

注:尽可能多的捕捉SQL。



查看SQL SET信息

SELECT NAME, OWNER, CREATED, STATEMENT_COUNT, LAST_MODIFIEDFROM DBA_SQLSET;


SQL SET 中的SQL信息加载至中间表

BEGIN DBMS_SQLTUNE.CREATE_STGTAB_SQLSET('TAB_SQLSET', 'SPA', 'USERS');END;/BEGIN DBMS_SQLTUNE.PACK_STGTAB_SQLSET(SQLSET_NAME => 'SQLSET_20190918_TEST', SQLSET_OWNER => 'SPA', STAGING_TABLE_NAME => 'TAB_SQLSET', STAGING_SCHEMA_OWNER => 'SPA');END;/

源端的SQL SET 表导入至目标端

delete from spa.TAB_TARGET_SQLSET_20190918where rowid not in (select max(rowid)from spa.TAB_TARGET_SQLSET_20190918group by FORCE_MATCHING_SIGNATURE)and FORCE_MATCHING_SIGNATURE <> 0;COMMIT;

中间表数据关联到目标端SQL SET

BEGINDBMS_SQLTUNE.CREATE_SQLSET(SQLSET_NAME => ' SQLSET_20190918_TEST',DESCRIPTION => 'SQL Set',SQLSET_OWNER => 'SPA');END;/
BEGINDBMS_SQLTUNE.Unpack_Stgtab_Sqlset(sqlset_name => 'SQLSET_20190918_TEST',sqlset_owner => 'SPA',replace => TRUE,staging_table_name => 'TAB_TARGET_SQLSET_20190918',staging_schema_owner => 'SPA');END;/
3. 目标端删除DBLINK
declarecur number := sys.DBMS_SYS_SQL.open_cursor;rc number;CURSOR cur_sql ISSELECT b.user_id,a.owner,a.object_name,'drop database link ' || object_name exec_sqlfrom dba_objects ainner join dba_users bon (a.owner = b.username)where object_type = 'DATABASE LINK';beginfor i in cur_sql loopSYS.DBMS_SYS_SQL.parse_as_user(c => cur,statement => i.exec_sql,language_flag => DBMS_SQL.native,userID => i.user_id);rc := SYS.DBMS_SYS_SQL.execute(cur);end loop;SYS.DBMS_SYS_SQL.close_cursor(cur);end;/检查:select owner, object_name, object_type, statusfrom dba_objectswhere object_type = 'DATABASE LINK';


目标端建立TASK

连接到SPA账户。
declarel_a varchar2(30);beginl_a := DBMS_SQLPA.CREATE_ANALYSIS_TASK(sqlset_name => 'SQLSET_20190918_TEST',task_name => 'TASK_20190918',SQLSET_OWNER => 'SPA');end;/

源端目标端生成trail文件

beginDBMS_SQLPA.EXECUTE_ANALYSIS_TASK(task_name => 'TASK_20190918',execution_type => 'CONVERT SQLSET',execution_name => 'SOURCE_CONVERT_SQLSET');end;/
beginDBMS_SQLPA.SET_ANALYSIS_TASK_PARAMETER(task_name => 'TASK_20190918',parameter => 'LOCAL_TIME_LIMIT',value => 60);end;/beginDBMS_SQLPA.EXECUTE_ANALYSIS_TASK(task_name => 'TASK_20190918',execution_type => 'TEST EXECUTE',execution_name => 'TARGET_EXEC');end;/

执行比较

1. 比较执行时间
beginDBMS_SQLPA.EXECUTE_ANALYSIS_TASK(task_name => 'TASK_20190918',execution_type => 'COMPARE PERFORMANCE',execution_name => 'Compare_elapsed_time',execution_params => dbms_advisor.arglist('execution_name1','SOURCE_CONVERT_SQLSET','execution_name2','TARGET_EXEC','comparison_metric','elapsed_time'));end;/
2. 比较CPU
beginDBMS_SQLPA.EXECUTE_ANALYSIS_TASK(task_name => 'TASK_20190918',execution_type => 'COMPARE PERFORMANCE',execution_name => 'Compare_CPU_time',execution_params => dbms_advisor.arglist('execution_name1','SOURCE_CONVERT_SQLSET','execution_name2','TARGET_EXEC','comparison_metric','CPU_TIME'));end;/
beginDBMS_SQLPA.EXECUTE_ANALYSIS_TASK(task_name => 'TASK_20190918',execution_type => 'COMPARE PERFORMANCE',execution_name => 'Compare_BUFFER_GETS_time',execution_params => dbms_advisor.arglist('execution_name1','SOURCE_CONVERT_SQLSET','execution_name2','TARGET_EXEC','comparison_metric','BUFFER_GETS'));end;/

目标端获取报告

conn spa/oracleset trimspool onset trim onset pages 0set long 999999999set linesize 1000spool spa_report_elapsed_time.htmlSELECT dbms_sqlpa.report_analysis_task('TASK_20190918','HTML','ALL','ALL',top_sql => 1000,execution_name => 'Compare_elapsed_time')FROM dual;spool off;spool spa_report_CPU_time.htmlSELECT dbms_sqlpa.report_analysis_task('TASK_20190918','HTML','ALL','ALL',top_sql => 1000,execution_name => 'Compare_CPU_time')FROM dual;spool off;spool spa_report_buffer_time.htmlSELECT dbms_sqlpa.report_analysis_task('TASK_20190918','HTML','ALL','ALL',top_sql => 1000,execution_name => 'Compare_BUFFER_GETS_time')FROM dual;spool off;spool spa_report_errors.htmlSELECT dbms_sqlpa.report_analysis_task('TASK_20190918','HTML','errors','summary')FROM dual;spool off;spool spa_report_unsupport.htmlSELECT dbms_sqlpa.report_analysis_task('TASK_20190918','HTML','unsupported','all')FROM dual;spool off;/

查看报告





END

更多精彩干货分享
点击下方名片关注
IT那活儿

文章转载自IT那活儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




