oracle,awr,sql优化,性能测试

   做性能测试时有时需要分析sql的执行情况,以找出需要优化的sql,oracle数据库就提供了很好的数据库状态和sql执行情况的监控平台,数据库的监控平台可以时时的监控数据库的状态,同时还可以取监控的时间段生成awr报告,来分析指定时间段的数据库的运行状态。

  awr报告其实就是取的数据库中两个快照之间数据,形成了一个报告的形式,通过数据的方式更加直观的展示所选两个快照之间数据库的运行状态。

  awr报告的提取方式我知道的有两种,一种是通过命令行提取,一种是从oracle数据库的控制台中指定两个快照来生成(前提是数据库打开了控制台,地址一般为“http://localhost:1158/em”),下面记录通过命令行提取awr报告的过程。

1、在命令行链接数据库

# sqlplus /nolog --使用无用户的方式连接

sql>conn sysdba; --连接超级管理员

2、oracle数据默认是存储7天的快照信息的,默认的采样间隔为1小时(存储时长和采样周期可以根据自己需要设置),这个信息可以从DBA_HIST_WR_CONTROL视图中获得:

1 sql>col SNAP_INTERVAL for a20
2 sql>col RETENTION for a20
3 sql>select * from dba_hist_wr_control;
4 SNAP_INTERVAL=+00000 01:00:00.0 表示采样间隔是1小时
5 RETENTION=+00007 00:00:00.0 表示采样数据保留期限是7天
6 
7 关于DBA_HIST_WR_CONTROL视图的更多参考可参见Oracle官方文档
8 http://download.oracle.com/docs/cd/B19306_01/server.102/b14237/statviews_3202.htm#REFRN23462

3、提取两个快照之间的awr报告

1 sql>@?/rdbms/admin/awrrpt.sql
 2 Specify the Report Type:“html”
 3 --选择查看快照的时间,不能超过最大保留时间;
 4 --输入快照的起始和结束节点,如下:
 5 Enter value for end_snap: 1265
 6 End Snapshot Id specified: 1265
 7 
 8 定义报告的名称;<name>
 9 
10 注意:生成awr报告在命令行的当前目录下

 

备注:

  oracle默认是不会生成第一个快照的,没有第一个快照就不会按照时间间隔来生成快照记录,如果检测数据没有记录快照,请收到创建一个快照,然后数据库就会自动根据设置的周期记录快照了。手动生成和删除快照的指令如下:

1 创建和删除基线
 2 exec dbms_workload_repository.create_baseline(start_snap_id => xx,end_snap_id => xx ,baseline_name => 'base line');
 3 查询基线
 4 select baseline_name,start_snap_id,end_snap_id from dba_hist_baseline;  
 5 删除基线
 6 exec dbms_workload_repository.drop_baseline(baseline_name => 'base line',cascade => true); 
 7 
 8 创建和删除快照
 9 exec dbms_workload_repository.create_snapshot();  
10 exec dbms_workload_repository.drop_snapshot_range(low_snap_id => xx ,high_snap_id => xx ); xx表示snap id