oracle 產生awr 報告

kidking2010發表於2011-07-17

資料庫的效能分析大致分為2類:
1.會話級別 如果能確定某個會話效能問題(也可能是某個使用者向你提出的一個操作緩慢的申告),就針對會話做分析。最常見的分析是對這個會話做一個sql_trace或者10046事件,透過trace檔案來定位問題所在。
2.系統級別、例項級別;如果確定會話有問題就從例項級別來分析問題所在。可以檢視一些動態檢視比如v$sysstat,v$system_events;為了查詢例項裡面的整體效能情況可能要查詢多方面的資訊:如sql比如i/o比如等待,需要查詢非常多的檢視。oracle 10g下的效能採集工具:AWR(Automatic Workload Repository)自由執行在oracle的後臺程式自動、定期收集資料庫的效能資料,並將其資料儲存起來,每1小時awr會生成一次效能資料快照,為DBA提供某個時刻的資料庫效能分析處理資訊。
這個目錄一定要記住:
$ORACLE_HOME/RDBMS/admin;它下面有許多的sql指令碼,用於管理資料庫的;
awr的指令碼就是:awrrpt.sql
sqlplus / as sysdba @awrrpt.sql;
Statspack報告:在$ORACLE_HOME/RDBMS/ADMIN/下的cpcreate.sql
/opt/oracle/product/10.2/db_1/rdbms/admin這個是它的管理目錄

它的oracle家目錄就是/opt/oracle//product/10.2/db_1/
%%%
> sqlplus / as sysdba @awrrpt.sql
SQL*Plus: Release 10.2.0.1.0 - Production on 星期一 9月 6 21:03:19 2010

Copyright (c) 1982, 2005, Oracle.  All rights reserved.


Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options


Current Instance
~~~~~~~~~~~~~~~~

   DB Id    DB Name      Inst Num Instance
----------- ------------ -------- ------------
 1242342279 ORCL                1 orcl


Specify the Report Type
~~~~~~~~~~~~~~~~~~~~~~~
Would you like an HTML report, or a plain text report?
Enter 'html' for an HTML report, or 'text' for plain text
Defaults to 'html'
Enter value for report_type:
%%%
Enter value for report_type:

Type Specified:  html


Instances in this Workload Repository schema
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

   DB Id     Inst Num DB Name      Instance     Host
------------ -------- ------------ ------------ ------------
* 1242342279        1 ORCL         orcl         linux-lsdx

Using 1242342279 for database Id
Using          1 for instance number


Specify the number of days of snapshots to choose from
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Entering the number of days (n) will result in the most recent
(n) days of snapshots being listed.  Pressing without
specifying a number lists all completed snapshots.


Enter value for num_days:
%%%
Enter value for num_days: 1

Listing the last day's Completed Snapshots

                                                        Snap
Instance     DB Name        Snap Id    Snap Started    Level
------------ ------------ --------- ------------------ -----
orcl         ORCL              3037 06 9月  2010 00:00     1
                               3038 06 9月  2010 01:00     1
                               3039 06 9月  2010 02:00     1
                               3040 06 9月  2010 03:00     1
                               3041 06 9月  2010 04:00     1
                               3042 06 9月  2010 05:00     1
                               3043 06 9月  2010 06:00     1
                               3044 06 9月  2010 07:00     1
                               3045 06 9月  2010 08:00     1
                               3046 06 9月  2010 09:01     1
                               3047 06 9月  2010 10:01     1
                               3048 06 9月  2010 11:00     1
                               3049 06 9月  2010 12:00     1
                               3050 06 9月  2010 13:00     1
                               3051 06 9月  2010 14:00     1
                               3052 06 9月  2010 15:00     1
                               3053 06 9月  2010 16:00     1
                               3054 06 9月  2010 17:00     1
                               3055 06 9月  2010 18:00     1
                               3056 06 9月  2010 19:01     1
                               3057 06 9月  2010 20:00     1
                               3058 06 9月  2010 21:00     1

 

Specify the Begin and End Snapshot Ids
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Enter value for begin_snap:
%%%
3039

3040
兩個時間點的awr
指定路徑/tmp/myawr20100906.html
就生成了一個報告出來;
另外oracle還提供了一個指令碼awrrpti.sql使用這個指令碼可以直接生成其資料庫或者其它資料庫例項上的awr報告;
> ll awrrpti.sql
-rw-rw---- 1 oracle oinstall 7575 Apr 18  2005 awrrpti.sql
@@@@@@

常見的等待事件:
1> buffer busy waits;
這個事件產生僅僅說明了一個會話在等待一個buffer(資料塊),但是導致這現象的原因有許多種,常見的2種是:
1。當一個會話試圖修改一個資料塊,但這個資料塊正在被另一個會話修改時;
2。當一個會話需要讀取一個資料塊,但這個資料塊正在被另一個會話讀取到內
oracle操作的最小單位是塊(block),即使要修改一條記錄,也需要對這條記錄所在的這個資料塊做操作。當對這個資料塊做修改時候,其它會話將被阻止對這個資料塊上的資料做修改(即使其他使用者修改的不是當前使用者修改的資料)但是可以以一致性的方式來讀取這個資料塊。當前使用者修改完這個資料塊後,將會立即釋放掉加在這個資料塊上的排他鎖定,這樣另一個會話就可以繼續修改它,修改操作時一個非常短暫的時間,這種加鎖的機制,叫latch;
當會話修改一個資料塊時,是按照以下步驟來完成的:
1。以排他的方式獲得這個資料塊(latch);
2。修改這個資料塊;
3。釋放latch;
buffer busy waits等待事件常見於資料庫中存在熱塊的時候,當多個使用者頻繁地讀取或者修改同樣的資料塊時,這個等待事件就會產生。如果等待事件很長,我們就透過AWR或者Statpack報告中可以看到。
這個等待事件包含3個引數:
File#:等待訪問資料塊所在的檔案id號;
Blocks:等待訪問的資料塊號;
Id:在10g之前,這個值表示一個等待事件的原因,10g以後則表示等待事件的類別;
存中;

¥¥¥¥
2> buffer latch
記憶體中資料塊的存放位置是在一個Hash列表(cache buffer chains)當中的。當一個會話需要訪問某個資料塊時,它首先要搜尋這個Hash列表,從列表中獲得資料塊的地址,然後透過這個地址去訪問需要的資料塊,這個列表oracle會使用一個Latch來保護它的完整性。當一個會話需要訪問列表時,需要獲取一個Latch,只有這樣,才能保證這個列表在這個會話的瀏覽中不會發生改變。
產生buffer latch的等待事件主要原因是:
1。buffer chains 太長,導致會話搜尋這個列表花費時間太長,使其他的會話處於等待狀態;
2。同樣的資料塊被頻繁訪問,就是我們通常說的熱塊問題。
如果buffer chains 太長,我們可以使用多個buffer pool 的方式來建立更多的buffer chains,或者使用引數DB_BLOCK_LRU_LATCHES來增加Latch的數量,以便更多的會話可以獲得Latch。這兩種方法可以同時使用。
等待事件包含兩個引數:
latch addr:會話申請的Latch在SGA中的虛擬地址,透過以下sql語句可以根據這個地址找到Latch名稱;

select * from v$latch a,v$latchname b where addr=latch addr and a.latch#=b.latch#;

chain#:buffer chains hash 列表中的索引值,當這個引數的值等於s 0xfffffff時,說明當前的會話正在等待一個LRU Latch;

3> control file parallel write
當資料庫有多個控制檔案的複製時,oracle需要保證資訊同步地寫到各個控制檔案當中,這是一個並行的物理操作過程,因此控制檔案並行寫,當發生這樣的操作時,就會產生control file parallel write 等待事件。
控制檔案頻繁寫入的原因有很多,比如:
1。日誌切換太過頻繁,導致控制檔案資訊相應地需要更頻繁更新。
2。系統i/o出現瓶頸,導致所有的i/o出現等待。
當系統出現日誌切換過於頻繁的情形時,可以考慮適當地增大日誌檔案的大小來降低日誌切換的頻率。
當系統出現大量的control fileparallel write 等待事件時,可以透過比如降低控制檔案的複製數量,將控制檔案的複製存放在不同的物理磁碟上的方法來緩解i/o徵用。
等待事件包含三個引數。
1。file:oracle 要寫入的控制檔案個數。
2。Blocks:寫入控制檔案的資料塊數目。
3。Requests:寫入控制請求的i/o次數。

4>control file sequential read
當資料庫需要讀取控制檔案上的資訊時,會出現這個等待事件,因為控制檔案的資訊是順序寫的,所以讀取的時候也是順序的,因此為控制檔案順序讀,它經常發生在以下情況:
1。備份控制檔案。
2。RAC環境下不同的例項之間控制檔案的資訊共享。
3。讀取控制檔案的檔案頭資訊。
4。讀取控制檔案的其它資訊。
這個等待事件包含以下3個引數:
File#:要讀取資訊的控制檔案的檔案號。
Block#:讀取控制檔案資訊的起始資料塊號。
Blocks:需要讀取的控制檔案資料塊的數目。

5>db file parallel read
這是一個容易引起誤導的等待事件,實際上這個等待事件和並行操作(比如並行查詢,並行DML)沒有關係。這個事件發生在資料庫恢復的時候,當有一些資料塊需要恢復的時候,oracle會以並行的方式把他們從資料檔案中讀入到記憶體進行恢復操作。
這個等待事件包含三個引數。
Files:操作需要讀取的檔案個數。
Blocks:操作需要讀取的資料塊個數。
Requests:操作需要執行的i/o次數。

6>db file parallel write
這是一個後臺等待事件。同樣和使用者的並行操作沒有關係,由後臺DBWR程式DBWR產生的,當後臺程式寫入髒資料塊的時候,會產生這個等待。DBWR 會批次將髒資料並行寫入到磁碟的相應資料檔案中,在這個批次作業完成之前,DBWR將出現這個等待事件。如果僅僅是一個等待事件,對使用者的操作並沒有太大影響,當伴隨出現free buffer waits 等待事件,說明此時記憶體中可用的空間不足,這時候將會影響到使用者的操作,比如影響到使用者將資料塊讀入到記憶體中。
當出現db file parallel write 等待事件時候,可用透過啟用作業系統的非同步I/O方式來緩解這個等待。當使用非同步I/O時,DBWR不再需要一直等待資料塊全部寫入到磁碟上,它只需要等到資料寫入到一個百分比之後,就可以繼續進行後續操作。
這個等待事件包含2個引數:Requests:操作需要執行的I/O次數;Timeouts:等待的超時時間;

7>db file scattered read
這個等待事件在實際生產資料庫中經常可以看到,這是一個使用者操作引起的等待事件,當使用者發出每次I/0需要讀取多個資料塊這樣的SQL操作時,會產生這個等待事件,最常見的是2種情況全表掃描(FTS,Full Table Scan)和索引快速掃描(IFFS,Index Fast Full Scan)。
這個名稱的scattered(發散)可能會導致很多人認可它是scattered的方式來讀取資料塊的,其實相反,當發生這種等待事件時,SQL的操作都是順序讀取資料塊的,比如FTS或者IFFS方式(如果忽略需要讀取的資料塊已經存在記憶體中的情況)。
其實這裡scattered指的是讀取的資料塊在記憶體中的存放方式,它們被讀取到記憶體中後,是以分散方式存放在記憶體中的,而不是連續的。
db file scattered read 包含3個引數:
File:要讀取的資料塊所在資料檔案的檔案號;
Block#:要讀取的起始資料塊號;
Blocks:需要讀取的資料塊數目;

8>db file sequential read
這個等待事件在實際生產資料庫中非常常見,當oracle需要每次I/O只讀單個資料塊這樣的操作時,會產生這個等待事件。最常見的情況有索引的訪問(除IFFS以外的方式),回滾操作,以ROWID的方式訪問表中的資料,重建控制檔案,對檔案頭做DUMP等。
這裡面的sequential(順序)也並非指的是oracle按照順序的方式來訪問資料,和db file scattered read 一樣,它指讀取資料塊在記憶體中醫連續方式存放的,不用誤導。
這個等待事件包含3個引數:
File#:要讀取的資料塊所在的資料檔案的檔案號;
Block#:要讀取的起始資料塊號;
Blocks:需要讀取的資料塊數目(在這裡應該等於1);

9> db file single write
這個等待事件只發生在一種情況下,就是oracle更新資料檔案頭資訊時(比如發生checkpoint)
當這個等待事件很明顯時,要考慮是不是資料庫的資料檔案數量太大,導致oracle需要花較長時間來做所有檔案頭的更新操作(checkpoint)。
包含3個引數:
File#:需要更新的資料塊所在資料檔案的檔案號;
Blocks#:需要更新的資料塊號;
Blocks:需要更新的資料塊數目(通常來說應該等於1);

10> direct path read
這個等待事件發生在會話將資料塊直接讀取到PGA中而不是SGA中的情況,這些被讀取的資料通常是這個會話的私有資料,所以不需要放到SGA作為共享資料,因為這樣做沒有意義。這些資料通常是來自於臨時段上的資料,比如一個會話SQL的排序資料,並行執行過程中間產生的資料,以及Hash join,Merge join產生的排序資料,因為這些資料只對當前的SQL會話有意義,所以不需要放在SGA中。
當發生direct path read 等待事件時,意味著磁碟上有大量的臨時資料產生,比如排序,並行執行等待操作,或者意味著PGA中空閒空間不足。
direct path read 包含3個引數:
descriptior address:一個指標,指向當前會話正在等待的一個direct read I/O;
first dba:descriptior address 中最舊的一個I/O資料塊的地址;
block cnt:descriptor address 上下文涉及的有效buffer數量;

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

相關文章