Oracle10g的AWR效能優化工具介紹

tolywang發表於2007-08-14
AWR(Automatic Workload Repository)Oracle 10g新提供的收集資料庫統計資訊的工具。它主要包括AWR記憶體區, 歷史資料儲存檔案和ASH等部件。

AWR報告的主要內容包括以下幾部分,

前言部分: 這是AWR報告的第一段,用於描述環境包括資料庫名,資料庫版本,是否為RAC節點, 快照報告的採集時間等。

綜述部分: 包含等待事件段,Load Profile,例項效率統計段,Shared Pool統計段,Cache Size, 其中最重要的是等待事件段, 它告訴我們在快照時間內資料庫遇到哪些效能瓶頸,它們將是效能調整或問題診斷的主要候選物件。以下Top Time Event資料摘自我的資料庫產生的AWR報告。

Event

Waits

Time(s)

Avg Wait(ms)

% Total Call Time

Wait Class

CPU time

17,306

99.6

db file scattered read

19,469,037

4,448

0

25.6

User I/O

log file parallel write

492,258

221

0

1.3

System I/O

log file sync

253,519

143

1

.8

Commit

read by other session

421,942

73

0

.4

User I/O

報告顯示”db file scattered read”是這個快照時間內最重要的等待事件,這種等待是由於會話在等待一個” multiblock IO”的完成, 通常這是由於在大表上執行全表掃描或索引快速掃描引起。接下來可以檢視哪些SQL執行這些查詢,查詢操作集中在哪些表上,檢查SQL PLAN看是否使用了索引。

SQL部分:無效的SQL語句是效能不好的主要原因,這部分對這段時間區間內的SQL按照執行時間,邏輯讀,磁碟讀等指標進行了分類和排序,STATSPACK不同的是,AWR報告中可以直接查到該SQL的文字和傳送請求的客戶端程式資訊,極大的提高了SQL分析的效率。

例項活動統計部分:這部分是快照期間,對例項的各個內部模組的活動和各種資源使用情況的統計,主要包括CPU使用情況,SQL*Net訊息,連結的行存取和PGA使用情況。

段統計部分:告訴哪些段(包括表和索引)在快照期間經歷最高的磁碟讀操作,這些資訊可以幫助我們決定是否需要重建索引,或對段進行分割槽來減少發生在這些資料檔案上的I/O

AWR地一些常用操作主要包括:

修改快照的收集和儲存時間,建立Baseline,匯出並遷移AWR資料。下面介紹一下這些功能使用方法。

預設情況下AWR每隔1小時自動收集一個系統負載快照,並且此快照預設儲存一週。但Oracle10g 提供以下命令可以修改快照收集時間間隔和儲存時間。

execute dbms_workload_repository.modify_snapshot_settings(interval => 120,retention => 20160);

上述命令修改快照的收集間隔為2小時,儲存時間為兩週。

可以為AWR資料建立baseline, 儲存這些資料用於將來分析和比較。具體命令如下,

execute dbms_workload_repository.create_baseline (start_snap_id =>1, end_snap_id =>100, baseline_name => 'baseline name', dbid => yourdbid);

可以將AWR資料匯出並遷移到其它資料庫以便於以後分析。Oracle10g Release2提供兩個新工具來完成匯出和遷移。AWR資料的工作。

DBMS_SWRF_INTERNAL.AWR_EXTRACT用來匯出資料,其使用方法如下,

Begin

DBMS_SWRF_INTERNAL.AWR_EXTRACT (

dmpfile => 'awr_data.dmp',

dmpdir => 'TMP_DIR',

bid => 302,

eid => 305);

end;

其中,dmpfile引數用於指定將要匯出的AWR資料檔案的名字,dmpdir是指定存放匯出檔案的目錄路徑,bid是起始快照編號,eid是結束快照編號。

DBMS_SWRF_INTERNAL用來遷移AWR資料檔案到其他資料庫。匯入AWR資料的過程分為兩個步驟,首先使用DBMS_SWRF_INTERNAL.AWR_LOAD方法把資料匯入到一個臨時模式中,本例是AWR_TEST(也可以自己定義名稱),具體方法如下,

begin

DBMS_SWRF_INTERNAL.AWR_LOAD (

SCHNAME => 'AWR_TEST',

dmpfile => 'awr_data',

dmpdir => 'TMP_DIR');

end;

接下來把需要把AWR資料轉移到SYS模式中,操作方法如下,

exec DBMS_SWRF_INTERNAL.MOVE_TO_AWR (SCHNAME => 'TEST');這樣AWR資料的匯入工作已經完成,現在可以使用這種方法建立一個專門存放AWR資料的資料庫,用於集中管理和分析多個資料庫例項的效能統計資料。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/35489/viewspace-84856/,如需轉載,請註明出處,否則將追究法律責任。

相關文章