oracle spa属于real application test的内容,用来对比sql前后性能变化,比如我要比较一条sql前后的的性能变化:

--单条sql流程

alter session set optimizer_features_enable='10.2.0.4';

variable g_task varchar2(100);

exec :g_task:= dbms_sqlpa.create_analysis_task(task_name=>'TASK2',sql_text=>'select count(*) from employees where employee_id>10')

exec dbms_sqlpa.execute_analysis_task(task_name=>:g_task,execution_type=>'test execute',execution_name=>'before_change');

alter table employees drop primary key drop index;

alter session set optimizer_features_enable='11.2.0.4';

--EXEC DBMS_SQLPA.SET_ANALYSIS_TASK_PARAMETER( :g_task,'comparison_metric', 'buffer_gets');

exec dbms_sqlpa.execute_analysis_task(task_name=>:g_task,execution_type=>'test execute',execution_name=>'after change');

exec dbms_sqlpa.execute_analysis_task(task_name=>:g_task,execution_type=>'compare performance',execution_name=>'compar');

spool d:\spa_report_elapsed_time.html

SELECT dbms_sqlpa.report_analysis_task(:g_task, 'HTML', 'ALL','ALL') FROM dual;

spool off;

exec DBMS_SQLPA.DROP_ANALYSIS_TASK('TASK2');

begin

DBMS_SQLPA.DROP_ANALYSIS_TASK('TASK2');

end;

当然一条SQ闹这么大动静是不值得的,用dba_hist视图就可以对比出来了,不用这么烦神;一个schema下的所有sql这个就比较劳神了,用spa可以很好的解决这个问题,流程如下:

**1.在生产上捕获工作负载

2.将SQL工作负载传输到一个测试系统

3.构建“更改前”性能数据

4.进行SQL重放,生成性能数据

5.对比,生成报告

具体实施步骤:

源端:oracle 10.2.0.1 ,hr用户,权限:grant advisor,administer sql tuning set to hr;

1 找到awr对应的snapshot;

begin

dbms_workload_repository.create_snapshot();

end;

select * from dba_hist_snapshot where begin_interval_time>sysdate-1/24

2 建立sqlset ,采集sql性能数据

--创建sqlset

begin

dbms_sqltune.create_sqlset('sql_1') ;

end;

declare cur sys_refcursor;

begin

open cur for

SELECT VALUE(P) FROM

TABLE(DBMS_SQLTUNE.select_workload_repository(49,50,q'[ parsing_schema_name in ('HR') ]')) p;

dbms_sqltune.load_sqlset(sqlset_name => 'sql_1',populate_cursor => cur);

close cur;

end;

/

--查看sqlset集

select * from table(dbms_sqltune.select_sqlset('sql_1')) where buffer_gets>0;

--创建sqlset表

begin

dbms_sqltune.create_stgtab_sqlset(table_name => 'SPA_2',schema_name => 'HR');

end;

--执行pack,将数据打包到表

begin

DBMS_SQLTUNE.pack_stgtab_sqlset(sqlset_name => 'upg_sql',

SQLSET_OWNER=>'HR',

staging_table_name => 'SPA_2',

staging_schema_owner => 'HR');

end;

--删除sqlset

exec dbms_sqltune.drop_sqlset('sql_1') ;

select sql_id,sql_text,buffer_gets from spa_2;

expdp hr/hr directory=exp dumpfile=spa.dmp logfile=spa.log tables=SPA_2

传输到11g的服务器,目标端:oracle 11.2.0.4

impdp之后解压:

begin

DBMS_SQLTUNE.UNPACK_STGTAB_SQLSET(sqlset_name => 'sql_1',

sqlset_owner => 'HR',

replace => TRUE,

staging_table_name => 'SPA_2');

end;

建立分析任务

VAR aname varchar2(30);

EXEC :aname := DBMS_SQLPA.CREATE_ANALYSIS_TASK(task_name => 'compares',sqlset_name =>'sql_1');

--执行源端10g分析

begin

DBMS_SQLPA.EXECUTE_ANALYSIS_TASK(task_name => 'compares',

execution_type => 'convert sqlset',

execution_name => 'first trial');

end;

--执行目标端11分析

begin

DBMS_SQLPA.EXECUTE_ANALYSIS_TASK(task_name => 'compares',

execution_type => 'test execute',

execution_name => 'second trial'

);

end;

--生成比较任务

begin

DBMS_SQLPA.EXECUTE_ANALYSIS_TASK(task_name => 'compares',

execution_type => 'compare',

execution_name => 'compare_1'

);

end;

--生成报告

spool reports.html

SELECT DBMS_SQLPA.REPORT_ANALYSIS_TASK('compares', 'html', 'TYPICAL', 'ALL') from dual;

删除任务

begin

DBMS_SQLPA.DROP_ANALYSIS_TASK('compares');

end;

相关包说明参考:Oracle® Database PL/SQL Packages and Types Reference 11g Release 2 (11.2)--》dbms_spa/dbms_sqltune

1 相关错误

ERROR at line 1:

ORA-13757: "SQL Tuning Set" "sql_1" owned by user "HR" is active.

说明sql_1正在被使用,找到被引用的分析任务

select description, created, owner

from DBA_SQLSET_REFERENCES

where sqlset_name ='sql_1';

DESCRIPTION CREATED OWNER

--------------------------------------------------------------------------------------------- --------- ------------------------------

created by: SQL Performance Analyzer - task: compare_1 20-JUL-18 HR

select owner,description, created,last_modified

from DBA_ADVISOR_TASKS

where task_name = 'compare_1';

删除即可:

execute dbms_sqltune.drop_tuning_task('compare_1');

begin

dbms_sqltune.drop_sqlset('sql_1');

end;

oracle spa性能测试,oracle spa相关推荐

  1. oracle临时表经常被锁_5.性能测试 - Oracle体系结构和性能优化简介

    体系结构 Oracle体系结构示意图 Oracle服务器: Oracle服务器是一个数据库管理系统,它为信息管理提供了开放.综合和集成的方法,包括Oracle实例和 Oracle数据库. Oracle ...

  2. oracle awr报告生成_5.性能测试 - Oracle体系结构和性能优化简介

    体系结构 Oracle体系结构示意图 Oracle服务器: Oracle服务器是一个数据库管理系统,它为信息管理提供了开放.综合和集成的方法,包括Oracle实例和 Oracle数据库. Oracle ...

  3. oracle 9i hwm,Oracle 10g HWM原理及性能优化

    摘 要: HWM(High Water Mark)是表中已经使用过的存储空间与未使用过的存储空间之间的分界线,HWM对全表扫描的性能有非常大的影响.当全表扫描时,Oracle会读取HWM下所有的块,即 ...

  4. Oracle Study之--Oracle等待事件(3)

    Oracle Study之--Oracle等待事件(3) Db file parallel read 这是一个很容易引起误导的等待事件,实际上这个等待事件和并行操作(比如并行查询,并行DML)没有关系 ...

  5. oracle技术之Oracle 跟踪事件(一)

    一.Oracle跟踪文件 Oracle跟踪文件分为三种类型,一种是后台报警日志文件,记录数据库在启动.关闭和运行期间后台进程的活动情况,如表空间创建.回滚段创建.某些alter命令.日志切换.错误消息 ...

  6. 使用Oracle instantClient代替Oracle Client安装

    使用Oracle instantClient代替Oracle Client安装 目录 使用Oracle instantClient代替Oracle Client安装 #Oracle instantCl ...

  7. cmd删除oracle监听,oracle数据库监听删除

    oracle 10G for linux常用命令 oracle 10G for linux常用命令 首先以Oracle用户登录 1. $/oracle/oracle/app/product/101/b ...

  8. lua 访问oracle,lua链接oracle解决方法与步骤

    测试环境centos7 1) 使用luajit ,这个比较简单,下载luajit源码,编译即可 省略 以下是具体操作步骤: 参考文章:http://www.programgo.com/article/ ...

  9. oracle顺序读等待,Oracle Study之--Oracle等待事件(4)

    Oracle Study之--Oracle等待事件(4) Db file scattered read这个等待事件在实际生产库中经常可以看到,这是一个用户操作引起的等待事件,当用户发出每次I/O需要读 ...

最新文章

  1. elasticsearch 客户端工具_elasticsearch初使用
  2. 收藏 | 数据分析师最常用的10个机器学习算法!(附图解)
  3. Jenkins入门总结
  4. 利用My97DatePicker实现年份多选
  5. RabbitMq--2--安装
  6. 夺命雷公狗---node.js---21之项目的构建在node+express+mongo的博客项目6之数据的遍历...
  7. PAT 1044 火星数字(20)(思路+代码)
  8. 如何让app不走系统代理?
  9. 白云市场高仿包值不值得买?
  10. 2020安徽省大数据与人工智能网络赛题目
  11. 恒源智GPU云服务器
  12. 程序实现金融租赁融资试算器 Financial Calculator
  13. RTX 4070TI和RTX 4080差距 RTX4070ti和4080区别对比
  14. FPGA引脚功能说明与分析
  15. LearnGL - 05 - Texture
  16. 阿里大力押注的淘宝心选,还赶不上网易严选们吗?
  17. A005:python 时间处理
  18. ARM64之内存屏障
  19. 泰勒级数+牛顿迭代公式+最简单的C语言求根号的值
  20. 转 FTP搜索引擎的设计与实现(优化版)

热门文章

  1. Angular给HTML节点绑定自定义属性和变量,用于设置一些动态的状态变化非常有用!
  2. 一行CSS样式去除百度地图版权,去除百度地图右上角平移缩放控件的市县区文字
  3. 在ATS 5.3.0上测试域名统计插件channel_stats
  4. 一图带你入门Linux 存储I/O栈
  5. C++ STL: lower_bound 和 upper_bound
  6. Linux内存管理:bufferCache和PageCache
  7. l-logger命令基本介绍
  8. Powerdesigner逆向工程64位Oracle数据库
  9. ASP.net session 使用总结(2)
  10. bash脚本【一】——批量处理文件