天天看點

AWR 簡介

一. AWR 說明

            Oracle 10g之前對資料庫做性能檢測使用statspack工具。 關于statspack的說明,參考我的Blog:

            statspack安裝使用 和 report 分析

            Oracle Database 10g 提供了一個新的工具:(AWR:Automatic Workload Repository)。Oracle 建議使用者用這個取代 Statspack。AWR 實質上是一個 Oracle 的内置工具,它采集與性能相關的統計資料,并從那些統計資料中導出性能量度,以跟蹤潛在的問題。

            與 Statspack 不同,快照由一個稱為 MMON 的新的背景程序及其從程序自動地每小時采集一次。為了節省空間,采集的資料在 7 天後自動清除。快照頻率和保留時間都可以由使用者修改。它産生兩種類型的輸出:文本格式(類似于 Statspack 報表的文本格式但來自于 AWR 資訊庫)和預設的 HTML 格式(擁有到部分和子部分的所有超連結),進而提供了非常使用者友好的報表。

            AWR 使用幾個表來存儲采集的統計資料,所有的表都存儲在新的名稱為 SYSAUX 的特定表空間中的 SYS 模式下,并且以 WRM$_* 和 WRH$_* 的格式命名。前一種類型存儲中繼資料資訊(如檢查的資料庫和采集的快照),後一種類型儲存實際采集的統計資料。H 代表“曆史資料 (historical)”而 M 代表“中繼資料 (metadata)”。

            在這些表上建構了幾種帶字首 DBA_HIST_ 的視圖,這些視圖可以用來編寫您自己的性能診斷工具。視圖的名稱直接與表相關;例如,視圖DBA_HIST_SYSMETRIC_SUMMARY 是在WRH$_SYSMETRIC_SUMMARY 表上建構的。

注意一點:

            statistics_level 預設是typical,在10g中表監控是激活的,強烈建議在10g中此參數的值是typical。如果STATISTICS_LEVEL設定為basic,不僅不能監控表,而且将禁掉如下一些10g的新功能:

            ASH(Active Session History)

            ASSM(Automatic Shared Memory Management)

            AWR(Automatic Workload Repository)

            ADDM(Automatic Database Diagnostic Monitor)

在Oracle 11gR2裡禁用的功能如下:

<code>STATISTICS_LEVEL</code> specifies the level of collection for database and operating system statistics. The Oracle Database collects these statistics for a variety of purposes, including making self-management decisions.

The default setting of <code>TYPICAL</code> ensures collection of all major statistics required for database self-management functionality and provides best overall performance. The default value should be adequate for most

environments.

When the <code>STATISTICS_LEVEL</code> parameter is set to <code>ALL</code>, additional statistics are added to the set of statistics collected with the <code>TYPICAL</code> setting. The additional statistics are timed OS statistics

and plan execution statistics.

Setting the <code>STATISTICS_LEVEL</code> parameter to <code>BASIC</code> disables the collection of many of the important statistics required by Oracle Database features and functionality, including:

Automatic Workload Repository (AWR) Snapshots

Automatic Database Diagnostic Monitor (ADDM)

All server-generated alerts

Automatic SGA Memory Management

Automatic optimizer statistics collection

Object level statistics

End to End Application Tracing (<code>V$CLIENT_STATS</code>)

Database time distribution statistics (<code>V$SESS_TIME_MODEL</code> and <code>V$SYS_TIME_MODEL</code>)

Service level statistics

Buffer cache advisory

MTTR advisory

Shared pool sizing advisory

Segment level statistics

PGA Target advisory

Timed statistics

Monitoring of statistics

1.ash占用的記憶體大小

ASH的采集資訊儲存在記憶體中,在舊的資訊被采樣到AWR中後,可被新采集的資訊覆寫,重新開機oracle後該資訊被清除。配置設定給ASH的記憶體大小可以查詢到:select pool, name, bytes/1024/1024 From v$sgastat

where name like '%ASH%'; 

AWR 簡介

2.AWR更正

為了便于描述和了解,在第一部分中,我們說AWR就是儲存ASH中的資訊。

其實,AWR記錄的資訊不僅是ASH,還可以收集到資料庫運作的各方面統計資訊和等待資訊,用以診斷分析。

AWR的采樣方式是,以固定的時間間隔為其所有重要的統計資訊和負載資訊執行一次采樣,并将采樣資訊儲存在AWR中。

可以這樣說:ASH中的資訊被儲存到了AWR中的視圖wrh$_active_session_history中。ASH是AWR的真子集。

3.mmon程序與mmnl程序

快照由一個稱為MMON 的新的背景程序(及其從程序)以及MMNL背景程序自動地每隔固定時間采樣一次。我們先來看一下10g的概念指南中對這兩個新增加的背景程序的介紹:

MMON程序負責執行多種和管理相關(manageability-related)的背景任務,例如:

當某個測量值(metrics)超過了預設的限定值(threshold value)後送出警告。

建立新的 MMON 隸屬程序(MMON slave process)來進行快照(snapshot)。

捕獲最近修改過的 SQL 對象的統計資訊。

MMNL程序負責執行輕量級的且頻率較高的和可管理性相關的背景任務,例如捕獲會話曆史資訊,測量值計算等。

AWR的采樣工作由MMON程序每個1小時執行一次,ASH資訊同樣會被采樣寫出到AWR負載庫中。雖然ASH buffer被設計為保留1小時的資訊,但很多時候這個記憶體是不夠的,當ASH buffer寫滿後,另外一個背景程序MMNL将會主動将ASH資訊寫出。

4.SYSAUX表空間

這些采樣資料都存儲在SYSAUX表空間中,并且以WRM$_* 和 WRH$_*的格式命名。前一種類型存儲中繼資料資訊(如檢查的資料庫和采集的快照),後一種類型儲存實際采集的統計資料。

SQL&gt; select table_name from dba_tables where table_name like 'WRM$%';  

TABLE_NAME  

-----------------------  

WRM$_WR_CONTROL  

WRM$_SNAP_ERROR  

WRM$_SNAPSHOT  

WRM$_DATABASE_INSTANCE  

WRM$_BASELINE 

當SYSAUX表空間滿後,AWR将自動覆寫掉舊的資訊,并在警告日志中記錄一條相關資訊:

ORA-1688: unable to extend table SYS.WRH$_ACTIVE_SESSION_HISTORY partition WRH$_ACTIVE_3533490838_1522 by 128 in tablespace SYSAUX

5.采樣頻率和保留時間

可以通過查詢視圖dba_hist_wr_control或(wrm$_wr_control)來查詢AWR的采樣頻率和保留時間。預設為每1小時采樣一次,采樣資訊保留時間為7天。

SQL&gt; select * from dba_hist_wr_control;  

DBID SNAP_INTERVAL RETENTION TOPNSQL  

---- ------------- ----------- ----------  

1148 +00000 00:1 +00007 00:0 DEFAULT  

SQL&gt; select DBID, SNAP_INTERVAL, SNAPINT_NUM, RETENTION from wrm$_wr_control;  

DBID SNAP_INTERVAL SNAPINT_NUM RETENTION  

---------- ------------------ ----------- --------------------  

1160732652 +00000 01:00:00.0 3600 +00007 00:00:00.0 

6.采樣資料量

由于資料量巨大,把所有ASH資料寫到磁盤上是不可接受的。一般是在寫到磁盤的時候過濾這個資料,寫出的資料占采樣資料的10%,寫出時通過direct-path insert完成,盡量減少日志生成,進而最小化資料庫性能的影響。

7.初始化參數statistics_level

AWR的行為受到參數STATISTICS_LEVEL的影響。這個參數有三個值:

BASIC:awr統計的計算和衍生值關閉.隻收集少量的資料庫統計資訊。

TYPICAL:預設值.隻有部分的統計收集.他們代表需要的典型監控oracle資料庫的行為。

ALL:所有可能的統計都被捕捉. 并且有作業系統的一些資訊.這個級别的捕捉應該在很少的情況下,比如你要更多的sql診斷資訊的時候才使用。

二.  AWR使用

SQL&gt;@?/rdbms/admin/awrrpt.sql

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'

輸入 report_type 的值: 

Type Specified:  html

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 &lt;return&gt; without

specifying a number lists all completed snapshots.

輸入 num_days 的值:  1

Listing the last day's Completed Snapshots

                                                        Snap

Instance     DB Name        Snap Id    Snap Started    Level

------------ ------------ --------- ------------------ -----

orcl10g      ORCL10G            142 03 7月  2009 08:11     1

                                143 03 7月  2009 09:00     1

                                144 03 7月  2009 10:00     1

                                145 03 7月  2009 11:00     1

                                146 03 7月  2009 12:01     1

Specify the Begin and End Snapshot Ids

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

輸入 begin_snap 的值:  142

Begin Snapshot Id specified: 142

輸入 end_snap 的值:  146

End   Snapshot Id specified: 146

Specify the Report Name

The default report file name is awrrpt_1_142_146.html.  To use this name,

press &lt;return&gt; to continue, otherwise enter an alternative.

輸入 report_name 的值:  D:/awrrpt_1_142_146.html

Report written to D:/awrrpt_1_142_146.html

三.  AWR 操作

3.1. 檢視目前的AWR儲存政策

SQL&gt; col SNAP_INTERVAL format a20

SQL&gt; col RETENTION format a20

SQL&gt; select * from dba_hist_wr_control;

      DBID SNAP_INTERVAL        RETENTION            TOPNSQL

---------- -------------------- -------------------- ----------

262089084 +00000 01:00:00.0    +00007 00:00:00.0    DEFAULT

以上結果表示,每小時産生一個SNAPSHOT,保留7天。

3.2. 調整AWR配置

AWR配置都是通過dbms_workload_repository包進行配置。

3.2.1 調整AWR産生snapshot的頻率和保留政策,如将收集間隔時間改為30 分鐘一次。并且保留5天時間(機關都是分鐘):

SQL&gt; exec dbms_workload_repository.modify_snapshot_settings(interval=&gt;30, retention=&gt;5*24*60);

3.2.2 關閉AWR,把interval設為0則關閉自動捕捉快照

SQL&gt; exec dbms_workload_repository.modify_snapshot_settings(interval=&gt;0);

3.2.3 手工建立一個快照

SQL&gt; exec DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT();

3.2.4 檢視快照

SQL&gt; select * from sys.wrh$_active_session_history

3.2.5 手工删除指定範圍的快照

SQL&gt; exec DBMS_WORKLOAD_REPOSITORY.DROP_SNAPSHOT_RANGE(low_snap_id =&gt; 973, high_snap_id =&gt; 999, dbid =&gt; 262089084);

3.2.6 建立baseline,儲存這些資料用于将來分析和比較

SQL&gt; exec dbms_workload_repository.create_baseline(start_snap_id =&gt; 1003, end_snap_id =&gt; 1013, 'apply_interest_1');

3.2.7 删除baseline

SQL&gt; exec DBMS_WORKLOAD_REPOSITORY.DROP_BASELINE(baseline_name =&gt; 'apply_interest_1', cascade =&gt; FALSE);

3.2.8 将AWR資料導出并遷移到其它資料庫以便于以後分析

SQL&gt; exec DBMS_SWRF_INTERNAL.AWR_EXTRACT(dmpfile =&gt; 'awr_data.dmp', mpdir =&gt; 'DIR_BDUMP', bid =&gt; 1003, eid =&gt; 1013);

3.2.9 遷移AWR資料檔案到其他資料庫

SQL&gt; exec DBMS_SWRF_INTERNAL.AWR_LOAD(SCHNAME =&gt; 'AWR_TEST', dmpfile =&gt; 'awr_data.dmp', dmpdir =&gt; 'DIR_BDUMP');

把AWR資料轉移到SYS模式中:

SQL&gt; exec DBMS_SWRF_INTERNAL.MOVE_TO_AWR (SCHNAME =&gt; 'TEST');

四. AWR 報告分析

這部分内容,可以參考statspack,這2個内容都差不多。

4.1 SQL ordered by Elapsed Time

            記錄了執行總和時間的TOP SQL(請注意是監控範圍内該SQL的執行時間總和,而不是單次SQL執行時間 Elapsed Time = CPU Time + Wait Time)。

            Elapsed Time(S): SQL語句執行用總時長,此排序就是按照這個字段進行的。注意該時間不是單個SQL跑的時間,而是監控範圍内SQL執行次數的總和時間。機關時間為秒。Elapsed Time = CPU Time + Wait Time

            CPU Time(s): 為SQL語句執行時CPU占用時間總時長,此時間會小于等于Elapsed Time時間。機關時間為秒。

            Executions: SQL語句在監控範圍内的執行次數總計。

            Elap per Exec(s): 執行一次SQL的平均時間。機關時間為秒。

            % Total DB Time: 為SQL的Elapsed Time時間占資料庫總時間的百分比。

            SQL ID: SQL語句的ID編号,點選之後就能導航到下邊的SQL詳細清單中,點選IE的傳回可以回到目前SQL ID的地方。

            SQL Module: 顯示該SQL是用什麼方式連接配接到資料庫執行的,如果是用SQL*Plus或者PL/SQL連結上來的那基本上都是有人在調試程式。一般用前台應用連結過來執行的sql該位置為空。

            SQL Text: 簡單的sql提示,詳細的需要點選SQL ID。

4.2 SQL ordered by CPU Time:

            記錄了執行占CPU時間總和時間最長的TOP SQL(請注意是監控範圍内該SQL的執行占CPU時間總和,而不是單次SQL執行時間)。

4.3 SQL ordered by Gets:

            記錄了執行占總buffer gets(邏輯IO)的TOP SQL(請注意是監控範圍内該SQL的執行占Gets總和,而不是單次SQL執行所占的Gets)。

4.4 SQL ordered by Reads:

            記錄了執行占總磁盤實體讀(實體IO)的TOP SQL(請注意是監控範圍内該SQL的執行占磁盤實體讀總和,而不是單次SQL執行所占的磁盤實體讀)。

4.5 SQL ordered by Executions:

            記錄了按照SQL的執行次數排序的TOP SQL。該排序可以看出監控範圍内的SQL執行次數。

4.6 SQL ordered by Parse Calls:

            記錄了SQL的軟解析次數的TOP SQL。說到軟解析(soft prase)和硬解析(hard prase),就不能不說一下Oracle對sql的處理過程。

4.7 SQL ordered by Sharable Memory:

            記錄了SQL占用library cache的大小的TOP SQL。Sharable Mem (b):占用library cache的大小,機關是byte。

4.8 SQL ordered by Version Count:

            記錄了SQL的打開子遊标的TOP SQL。

4.9 SQL ordered by Cluster Wait Time:

            記錄了叢集的等待時間的TOP SQL

下一篇: Logmnr 介紹