做性能測試時有時需要分析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