1.自動負載信息庫的概述
自動負載信息庫(AWR)收集、處理和維護性能統計信息,用於問題檢測和自行調優。這些數據存儲在內容和數據庫中,這些捕獲的屬性可以顯示在報表和視圖上。
AWR收集和處理的統計信息包括:
- 對象統計
- 時間模型統計
- 系統和會話統計
- 獲取會話歷史統計
自動工作負載信息庫默認是啓用的,由STATISTICS_LEVEL初始化話參數控制。該STATISTICS_LEVEL初始化參數應該設置爲TYPICAL或ALL ,啓用AWR統計收集。默認這是爲 TYPICAL。該STATISTICS_LEVEL參數設置爲BASIC禁用許多Oracle數據庫功能,包括AWR,不推薦使用。如果STATISTICS_LEVEL 參數設置爲BASIC,你仍然可以通過DBMS_WORKLOAD_REPOSITORY包手動捕獲AWR統計。但是,由於在內存中許多系統的統計數據是被禁用,例如段統計和內存顧問信息,這些快照捕獲的統計數據可能是不完全的。
自動負載信息庫包括以下內容:
- 快照
- 基線
- 自適應閥值
- 空間消耗
1.1快照
快照是ADDM用於性能比較的指定期間的一組歷史數據。默認情況下,Oracle數據庫每個小時自動產生一次快照,並保留8天負載統計信息。你也可以手動創建快照,但通常是沒有必要的。在快照間隔產生的數據,通過自動數據庫診斷器進行分析。
AWR比較不同快照之間的差異來確定捕獲影響系統負載的SQL語句,逐漸減少被捕獲的SQL語句。
1.2基線
基線包含來自指定期間保存性能數據,當出現性能問題時,用於與其他相似的負載期間進行比較。快照中包含的基線自動爲WAR清除進程排除,並永久保留。
有以下這種基線類型:
- 固定基線
- 移動窗口基線
- 模板基線
1.3子適應閥值
啓用自適應閥值,你可以監控和檢測性能問題,同時可以最大限度地減少管理開銷。自適應閥值可以針對已些系統指標自動設置警告和嚴重警告閥值。
1.4空間消耗
自動負載信息庫的空間消耗有以下幾個因素:
- 系統中活動時間的會話數
- 快照間隔
- 歷史數據的保留期
2.管理自動負載信息庫
如何管理自動負載信息庫包含以下幾個方面:
- 管理快照
- 管理基線
- 管理基線模板
- 傳輸自動負載信息庫數據
- 使用自動負載信息庫視圖
- 生成自動負載信息庫報表
- 生成自動負載信息庫比較期間報表
- 生成活動會話歷史表表
- 使用活動會話歷史表表
2.1管理快照
默認情況下,Oracle數據庫每個小時產生一次快照,並在負載信息庫中保留8天。必要時,可以通過DBMS_WORKLOAD_REPOSITORY過程手動創建,刪除和修改快照。要調用該過程,用戶必須要有DBA的權限。
管理快照的主要界面是Oracle企業管理器。只要有可能,應該使用Oracle企業管理器來管理快照。如果Oracle企業管理器不可用,則可以使用DBMS_WORKLOAD_REPOSITORY包管理快照。
2.1.1創建快照
如果你想捕獲不是系統自動生成的快照,可以通過CREATE_SNAPSHOT過程手動創建快照。例如:
BEGIN
DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT ();
END;
2.1.2刪除快照
你可以使用DROP_SNAPSHOT_RANGE刪除一個範圍內的快照,查看快照ID列表以及數據庫ID,檢查DBA_HIST_SNAPSHOT視圖。你可以刪除以下範圍的快照:
BEGIN
DBMS_WORKLOAD_REPOSITORY.DROP_SNAPSHOT_RANGE (low_snap_id => 22,
high_snap_id => 32, dbid => 3310949047);
END;
2.1.3修改快照設置
你可以調用間隔,保留期和捕獲指定數據庫ID的頂層SQL。但要注意這可能會影響Oracle診斷工具的使用。
INTERVAL 設置快照自動生成的頻率,以分鐘爲單位。RETENTION 設置負載信息庫保留的期限,以分鐘爲單位。TOPNSQL 設置刷新最高的SQL。使用MODIFY_SNAPSHOT_SETTINGS 過程調整設置。如下:
BEGIN
DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS( retention => 43200,
interval => 30, topnsql => 100, dbid => 3310949047);
END;
在這個例子中,保留期限被指定爲43200分中(30天),每個快照之間的間隔被指定爲30分鐘。你可以查詢DBA_HIST_WR_CONTROL 視圖查看數據庫實例的當前設置。
2.2管理基線
管理基線的主要界面是Oracle企業管理器。只要有可能,應該使用Oracle企業管理器來管理基線。如果Oracle企業管理器不可用,則可以使用DBMS_WORKLOAD_REPOSITORY包管理快照。
2.2.1創建基線
如果使用已存在的一個快照範圍創建基線。
- 檢閱DBA_HIST_SNAPSHOT視圖中已存在的快照,以確定你想要使用的快照範圍。
- 使用CREATE_BASELINE過程來創建期望快照範圍基線。
BEGIN
DBMS_WORKLOAD_REPOSITORY.CREATE_BASELINE (start_snap_id => 270,
end_snap_id => 280, baseline_name => 'peak baseline',
dbid => 3310949047, expiration => 30);
END;
2.2.2刪除期限
如果刪除一個已存在的基線:
- 檢閱DBA_HIST_SNAPSHOT視圖中已存在的基線,以確定你想要刪除的基線。
- 使用DROP_BASELINE 過程刪除期望的基線。
BEGIN
DBMS_WORKLOAD_REPOSITORY.DROP_BASELINE (baseline_name => 'peak baseline',
cascade => FALSE, dbid => 3310949047);
END;
2.2.3重名基線
如何重名基線:
- 檢閱DBA_HIST_SNAPSHOT視圖中已存在的基線,以確定你想要重名的基線。
- 使用DROP_BASELINE 過程刪除期望的基線。
BEGIN
DBMS_WORKLOAD_REPOSITORY.RENAME_BASELINE (
old_baseline_name => 'peak baseline',
new_baseline_name => 'peak mondays',
dbid => 3310949047);
END;
2.2.4顯示基線度量
如何顯示在一個時間段中捕獲的基線度量閥值。
- 檢閱DBA_HIST_SNAPSHOT視圖中已存在的基線,以確定你想要顯示的基線的度量信息。
- 使用SELECT_BASELINE_METRICS函數顯示期望的度量信息。
BEGIN
DBMS_WORKLOAD_REPOSITORY.SELECT_BASELINE_METRICS (
baseline_name => 'peak baseline',
dbid => 3310949047,
instance_num => '1');
END;
2.2.4修改移動窗口基線的默認窗口大小
使用MODIFY_BASELINE_WINDOW_SIZE過程修改移動窗口的默認大小。
BEGIN
DBMS_WORKLOAD_REPOSITORY.MODIFY_BASELINE_WINDOW_SIZE (
window_size => 30,
dbid => 3310949047);
END;
2.3管理基線模板
這個功能中你可以使用基線模板自動創建基線來捕獲指定時間段。
2.3.1創建單個基線模板
使用CREATE_BASELINE_TEMPLATE過程創建單個基線模板:
BEGIN
DBMS_WORKLOAD_REPOSITORY.CREATE_BASELINE_TEMPLATE (
start_time => '2007-04-02 17:00:00 PST',
end_time => '2007-04-02 20:00:00 PST',
baseline_name => 'baseline_070402',
template_name => 'template_070402', expiration => 30,
dbid => 3310949047);
END;
2.3.2創建多個基線模板
使用CREATE_BASELINE_TEMPLATE過程創建多個基線模板:
BEGIN
DBMS_WORKLOAD_REPOSITORY.CREATE_BASELINE_TEMPLATE (
day_of_week => 'monday', hour_in_day => 17,
duration => 3, expiration => 30,
start_time => '2007-04-02 17:00:00 PST',
end_time => '2007-12-31 20:00:00 PST',
baseline_name_prefix => 'baseline_2007_mondays_',
template_name => 'template_2007_mondays',
dbid => 3310949047);
END;
2.3.3刪除基線模板
如何刪除一個已存在的基線模板。
-
檢閱DBA_HIST_SNAPSHOT視圖中已存在的基線,以確定你想要刪除的基線模板。
-
使用DROP_BASELINE_TEMPLATE刪除期望的基線模板。
BEGIN
DBMS_WORKLOAD_REPOSITORY.DROP_BASELINE_TEMPLATE (
template_name => 'template_2007_mondays',
dbid => 3310949047);
END;
2.4傳輸自動負載信息庫數據
Oracle數據允許系統之間傳遞AWR數據,你想使用單獨的系統來執行AWR數據分析的情況下非常有用。傳輸AWR數據,你必須先從原系統數據庫上提取AWR快照數據,然後在加載到目標系統數據庫上。
2.4.1提取數據
該awrextr.sql腳本從數據庫中提取一個快照範圍的AWR數據到數據備份導出文件中。一旦被創建,這個備份文件可以被傳輸到另一個系統,可以加載所提取的數據。要運行awrextr.sql這個腳本,必須以SYS用戶連接到數據庫。
提取AWR數據:
1.在SQL提示符下,輸入
@$ORACLE_HOME/rdbms/admin/awrextr.sql
顯示AWR模式下的數據庫列表
2.指定將要提取AWR數據的數據庫
Enter value for db_id: 1377863381
3.指定你要列出快照ID的天數
Enter value for num_days: 2
4.指定開始和結束快照ID,定義的AWR數據的快照範圍。
Enter value for begin_snap: 30
Enter value for end_snap: 40
5.目錄對象列表
目錄對象指導出備份文件存儲的目錄
Enter value for directory_name: DATA_PUMP_DIR
6.指定導出文件名稱的前綴(自動附件.dmp後綴)
Enter value for file_name: awrdata_30_40
2.4.2加載數據
一旦導出備份文件愛你被傳輸到目標系統,則可以使用awrload.sql腳本加載提取的AWR數據。該awrload.sql腳本首先會創建一個暫存模式,並將快照數據從導出備份文件傳輸到數據庫中。然後將數據庫從暫存模式傳輸到AWR相應的表中。要運行awrload.sql腳本,必須使用SYS用戶連接數據庫。
加載數據:
1.在SQL提示符下,輸入:
@$ORACLE_HOME/rdbms/admin/awrload.sql
2.指定導出本備份文件放置目錄的目錄對象
Enter value for directory_name: DATA_PUMP_DIR
3.指定導出備份文件名稱的前綴(自動附件.dmp後綴)
Enter value for file_name: awrdata_30_40
4.指定加載AWR數據的暫存模式
Enter value for schema_name: AWR_STAGE
5.指定暫存模式的默認表空間
Enter value for default_tablespace: SYSAUX
6.指定暫存模式的臨時表空間
Enter value for temporary_tablespace: TEMP
7.一個名爲AWR_STAGE的模式將被創建,並加載AWR數據。AWR數據被加載到AWR_STAGE模式之後,數據將被轉移到SYS模式下的AWR表中。
Processing object type TABLE_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
Completed 113 CONSTRAINT objects in 11 seconds
Processing object type TABLE_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT
Completed 1 REF_CONSTRAINT objects in 1 seconds
Job "SYS"."SYS_IMPORT_FULL_03" successfully completed at 09:29:30
... Dropping AWR_STAGE user
End of AWR Load
2.5使用自動負載信息庫視圖
通常情況下,使用Oracle企業管理器或AWR表報查看AWR數據。然而,你也可以使用以下的視圖查看統計信息:
-
V$ACTIVE_SESSION_HISTORY
-
V$METRICGROUP視圖,提供度量數據跟蹤系統性能
-
DBA_HIST視圖
DBA_HIST視圖顯示數據庫中保存的歷史數據,包括以下幾個視圖組:
DBA_HIST_ACTIVE_SESS_HISTORY 限制最近活動系統的內存活動會話內容的歷史信息
DBA_HIST_BASELINE 顯示系統中捕獲的基線信息
DBA_HIST_BASELINE_DETAILS 顯示基線的詳細信息
DBA_HIST_BASELINE_TEMPLATE 顯示用於生成基線的基線模板信息
DBA_HIST_DATABASE_INSTANCE 顯示數據庫環境信息
DBA_HIST_SNAPSHOT 顯示系統中的快照信息
DBA_HIST_SQL_PLAN 顯示SQL執行計劃
DBA_HIST_WR_CONTROL 顯示AWR控制的設置信息
2.6生成自動負載信息庫報告
一個AWR報告顯示兩個快照(或兩個時間點)之間的捕獲數據,AWR報告分爲多部分。HTML報告包含快速瀏覽章節的導航鏈接。該報告內容包含選定範圍快照的系統負載概括。
2.6.1生成快照範圍的AWR報告
awrrpt.sql腳本生成一個HTML或文本格式的快照範圍統計報告。
生成快照範圍的AWR報告:
1.在SQL提示符下,輸入
@$ORACLE_HOME/rdbms/admin/awrrpt.sql
2.指定HTML或文本報告
Enter value for report_type: html(可以輸入html/text)
3.指定你要列出快照ID的天數
Enter value for num_days: 2
4.指定負載信息庫報告的開始和結束快照ID
Enter value for begin_snap: 30
Enter value for end_snap: 40
5.輸入報告名稱,或者使用默認報告名稱
Enter value for report_name:
Using the report name awrrpt_1_150_160
默認存儲在SQLPLUS的當前目錄中。如果想要存儲在其他位置,則需要指定報告的絕對路徑,
例如:
Enter value for report_name: D:\Chicle Data\awrrpt_1_150_160.html
2.6.2生成指定實例快照範圍的AWR報告
該awrrpti.sql腳本生成一個HTML或文本報告,顯示指定數據庫和實例的快照ID範圍的統計信息。在輸入快照範圍ID之前,需要先指定數據庫和實例。
生成指定實例快照範圍的AWR報告:
1.在SQL提示符下,輸入
@$ORACLE_HOME/rdbms/admin/awrrpti.sql
2.指定HTML或文本報表
Enter value for report_type: text
顯示可用的數據庫標識符和實例編號。
Instances in this Workload Repository schema
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
DB Id Inst Num DB Name Instance Host
----------- -------- ------------ ------------ ------------
3309173529 1 MAIN main examp1690
3309173529 1 TINT251 tint251 samp251
3.輸入數據庫標識符(dbid)和實例編號(inst_num)
Enter value for dbid: 3309173529
Using 3309173529 for database Id
Enter value for inst_num: 1
4.指定你要列出快照ID的天數
Enter value for num_days: 2
5.指定負載信息庫報告的開始和結束快照ID
Enter value for begin_snap: 150
Enter value for end_snap: 160
6.輸入報告名稱,或者使用默認報告名稱
Enter value for report_name:
Using the report name awrrpt_1_150_160
2.6.3生成SQL語句的AWR報告
該awrsqrpt.sql腳本生成一個HTML或文本報告,顯示指定SQL語句的快照ID範圍的統計信息。運行此報告,檢查和調試SQL語句的性能。
生成SQL語句的AWR報告:
1.在SQL提示符下,輸入
@$ORACLE_HOME/rdbms/admin/awrsqrpt.sql
2.指定HTML或文本報表
Enter value for report_type: html
3.指定你要列出快照ID的天數
Enter value for num_days: 1
4.指定負載信息庫報告的開始和結束快照ID
Enter value for begin_snap: 146
Enter value for end_snap: 147
5.指定SQL語句的ID
Enter value for sql_id: 2b064ybzkwf1y
6.輸入報告名稱,或者使用默認報告名稱
Enter value for report_name:
Using the report name awrrpt_1_146_147.html
2.6.4其他AWR報告
類似的AWR報告還有好幾個,生成的步驟也差不多,這裏就不做詳細的介紹:
生成指定實例的SQL語句的AWR報告:
@$ORACLE_HOME/rdbms/admin/awrsqrpi.sql
生成比較期間的AWR報告:
@$ORACLE_HOME/rdbms/admin/awrddrpt.sql
生成指定實例比較期間的AWR報告:
@$ORACLE_HOME/rdbms/admin/awrddrpi.sql
生成活動會話歷史(ASH)的AWR報告:
@$ORACLE_HOME/rdbms/admin/ashrpt.sql
生成指定實例的活動會話歷史(ASH)的AWR報告:
@$ORACLE_HOME/rdbms/admin/ashrpti.sql