Oracle数据库11g 新特性SPA测试报告
SPA介绍
大型业务关键应用程序要在响应时间、吞吐量、运行时间和可用性方面提供特定服务级别的保证。对系统的任何更改(如升级数据库或修改配置)通常都需要进行全面的测试和验证,然后才能在生产系统中实施这些更改。在移到生产系统之前为了保证安全,数据库管理员(DBA) 必须让测试系统承受与生产环境中的工作量很近似的压力,以便分析系统级更改对整体SQL性能的影响,并在在移到生产之前进行必要的优化。 Oracle Database 11g引入了SQL 性能分析器;使用该工具可以准确地预测系统更改对SQL 语句性能的影响。这种功能可向DBA 提供有关SQL 语句性能的详细信息,例如,执行前后的统计信息,提高或降低性能的语句。这样,你就在测试环境中先进行更改,以确定数据库升级是否会影响SQL性能。 SQL 性能分析器可用于预测和防止会影响SQL 执行计划结构的任何数据库环境更改所带来的潜在性能问题。这些更改可以包括(但不限于)以下任何一种更改: l 数据库升级 l 实施优化建议 l 更改方案 l 收集统计信息 l 更改数据库参数 l 更改操作系统和硬件 SQL 性能分析器是11g的新功能,通过相关的配置可以应用在Oracle 10g/Oracle9i升级到11g的过程中,大致的框架如下: 先在10g/9i上通过各种方法生成SQL优化集,然后再将优化集导入到11g上,最后对每条SQL生成10g和11g上的对比报告,从这个报告便能发现SQL性能是否改善,执行计划有没有改变。 SPA实施步骤
1.在10g和11g上应用必须必须要的补丁 参考:RealApplication Testing Now Available for Earlier Releases (Doc ID 560977.1) 2.在10g源数据库中创建SQL优化集,并将[测试]语句加载到优化集中。 参考:HOW TO LOADQUERIES INTO A SQL TUNING SET (Doc ID 1271343.1) 1).创建SQL优化集
execdbms_sqltune.create_sqlset('my10gsts_jiesuan'); 新建spa用户(不要在sys用户下),建立my10gsts_jiesuan
2).从当前游标缓存中加载
a) 加载指定sql_id的语句 DECLARE cur sys_refcursor; BEGIN open cur for select value(p) fromtable(dbms_sqltune.select_cursor_cache('sql_id = ''fgtq4z4vb0xx5''')) p; dbms_sqltune.load_sqlset('my10gsts_jiesuan',cur); close cur; END; / b) 加载逻辑读大于1000的语句 DECLARE cur sys_refcursor; BEGIN open cur for select value(p) fromtable(dbms_sqltune.select_cursor_cache('sql_text like ''%querystring%'' andbuffer_gets > 1000')) p; dbms_sqltune.load_sqlset('my10gsts_jiesuan',cur); close cur; END; / 说明 : "basic_filter"是根据SQLSET_ROW属性从游标缓存中过滤SQL的条件。 如果basic_filter在调用时没有被设置,那么子程序只捕捉 CREATE TABLE, INSERT, SELECT, UPDATE, DELETE,and MERGE等类型的语句. CREATE TYPEsqlset_row AS object ( sql_id VARCHAR(13), force_matching_signatureNUMBER, sql_text CLOB, object_listsql_objects, bind_data RAW(2000), parsing_schema_nameVARCHAR2(30), module VARCHAR2(48), action VARCHAR2(32), elapsed_time NUMBER, cpu_time NUMBER, buffer_gets NUMBER, disk_reads NUMBER, direct_writesNUMBER, rows_processedNUMBER, fetches NUMBER, executions NUMBER, end_of_fetch_countNUMBER, optimizer_costNUMBER, optimizer_envRAW(2000), priority NUMBER, command_type NUMBER, first_load_timeVARCHAR2(19), stat_period NUMBER, active_stat_periodNUMBER, other CLOB, plan_hash_valueNUMBER, sql_plansql_plan_table_type, bind_list sql_binds); 3).从AWR快照中加载
a).找出需要的快照 select snap_id,begin_interval_time, end_interval_time from dba_hist_snapshot order by 1; 由于数据force open是在2012-8-28号左右打开的,故生产系统的awr是在这之前的 select snap_id, begin_interval_time, end_interval_time fromdba_hist_snapshot where to_char(begin_interval_time,'YYYYMMDD')<'20120828'order by 1;
|