為了診斷Oracle運行緩慢的問題首先要決定收集哪些診斷資訊,可以採取下面的診斷方法:
1.資料庫運行緩慢這個問題是常見還是在特定時間出現
如果資料庫運行緩慢是一個常見的問題那麼可以在問題出現的時候收集這個時期的awr或者statspack報告(通常收集時間間隔是一個小時).產生awr報告的方法如下:
awr是通過sys使用者來收集持久系統效能統計資訊並且這些資訊儲存在sysaux資料表空間.預設情況下快照是一個小時產生一次並且保留7天.awr報告輸出了基於指定快照之間的一系列的統計資訊用於效能分析和調查其它問題.
運行基本的報告
可以執行下面的指令碼來產生一個awr報告:
$ORACLE_HOME/rdbms/admin/awrrpt.sql
可以根據自己收集awr報告的原因來決定產生一個快照的時間間隔也可以指定產生awr報告的格式(text或html).
產生各種類型的awr報告
可以根據各種要求來運行各種sql指令碼來產生各種類型的awr報告.每一種報告都有兩種格式(txt或html):
awrrpt.sql
顯示指定快照範圍內的各種統計資訊
awrrpti.sql
顯示一個特定資料庫和執行個體中指定快照範圍內的各種統計資訊
awrsqrpt.sql
顯示一個指定快照範圍內的一個特定的sql語句的統計資訊.運行這個報告是為了檢查或調查一個特定sql語句的效能
awrsqrpi.sql
顯示一個特定sql在指定快照範圍內的的統計資訊.
awrddrpt.sql
比較在兩個選擇的時間間隔期間內詳細的效能資料和配置情況
awrddrpi.sql
在一個特定的資料庫和平共處執行個體中比較在兩個選擇的時間間隔期間內詳細的效能數和配置情況
各種awr相關的操作
怎樣修改awr快照的設定:
BEGIN
DBMS_WORKLOAD_REPOSITORY.modify_snapshot_settings(
retention => 43200, -- Minutes (43200 = 30 Days).
-- Current value retained if NULL.
interval => 30); -- Minutes. Current value retained if NULL.
END;
/
建立一個awr基準:
BEGIN
DBMS_WORKLOAD_REPOSITORY.create_baseline (
start_snap_id => 10,
end_snap_id => 100,
baseline_name => 'AWR First baseline');
END;
/
在oracle11G中引入了一個新的dbms_workload_repository.create_baseline_template過程來建立一個awr基準模板
BEGIN
DBMS_WORKLOAD_REPOSITORY.CREATE_BASELINE_TEMPLATE (
start_time => to_date('&start_date_time','&start_date_time_format'),
end_time => to_date('&end_date_time','&end_date_time_format'),
baseline_name => 'MORNING',
template_name => 'MORNING',
expiration => NULL ) ;
END;
/
"expiration=>NULL"這意味著這個基準將永遠保持有效.
刪除一個awr基準
BEGIN
DBMS_WORKLOAD_REPOSITORY.DROP_BASELINE (
baseline_name => 'AWR First baseline');
END;
/
也能從一個老的資料庫中刪除一個awr基準:
BEGIN
DBMS_WORKLOAD_REPOSITORY.DROP_BASELINE (baseline_name => 'peak baseline',
cascade => FALSE, dbid => 3310949047);
END;
/
刪除awr快照:
BEGIN
DBMS_WORKLOAD_REPOSITORY.drop_snapshot_range(
(low_snap_id=>40,
High_snap_id=>80);
END;
/
也可能基於報告時間期間對建立和刪除的awr基準指定一個模板:
BEGIN
DBMS_WORKLOAD_REPOSITORY.CREATE_BASELINE_TEMPLATE (
day_of_week => 'MONDAY',
hour_in_day => 9,
duration => 3,
start_time => to_date('&start_date_time','&start_date_time_format'),
end_time => to_date('&end_date_time','&end_date_time_format'),
baseline_name_prefix => 'MONDAY_MORNING'
template_name => 'MONDAY_MORNING',
expiration => 30 );
END;
/
將會在'&start_date_time'到'&end_date_time'期間的每一個星期一都會產生基準
手動產生的一個awr快照:
BEGIN
DBMS_WORKLOAD_REPOSITORY.create_snapshot();
END;
/
工作負載資料檔案程式庫檢視:
V$ACTIVE_SESSION_HISTORY - 顯示曆史活動會話資訊每秒抽樣一樣
V$METRIC - 顯示度量標準資訊
V$METRICNAME - 顯示與每個度量標準組相關的度量標準
V$METRIC_HISTORY - 顯示曆史度量標準
V$METRICGROUP - 顯示所有的度量標準組
DBA_HIST_ACTIVE_SESS_HISTORY - 顯示曆史活動會話的詳細資料
DBA_HIST_BASELINE - 顯示基準資訊
DBA_HIST_DATABASE_INSTANCE - 顯示資料庫環境資訊
DBA_HIST_SNAPSHOT - 顯示快照資訊
DBA_HIST_SQL_PLAN - 顯示sql執行計畫
DBA_HIST_WR_CONTROL - 顯示awr設定情況
如果資料庫運行緩慢在特定時間出現那麼可以當問題存在時產生一個awr或statspack報告,報告的時間間隔包含了問題出現的時間.另外為了比較可以收集沒有出現問題而時間間隔相同的資料庫正常啟動並執行報告這樣可以對報告進行比較.