第9 章、Oracle 10g 中的效能管理

紅葉DBA發表於2011-02-28

章、Oracle 10g 中的效能管理

1.          資料庫統計

l  時間模型統計:

時間模型相關的檢視有:v$sess_time_model v$sys_time_model ,其中DB_TIME 是最重要的時間模型統計,他等於所有會話CPU 時間和等待時間的總和。其中不包括Idle 類的等待。

時間模型的父子關係:

u  後臺時間 > 後臺CPU 時間。

u  DB 時間 > DB CPU 、連結管理時間、序列載入時間、sql 執行時間、解析時間、PL/SQL 執行時間、inbound PL/SQL rpc 時間、PL/SQL 編譯時間、Java 執行時間。

u  解析時間 > 硬解析時間、失敗的解析時間。

u  硬解析時間 > 硬解析(共享標準)時間 > 硬解析(繫結不匹配)時間。

u  失敗的解析時間 > 失敗的解析(超出共享記憶體)時間

l  等待模型統計:

l  作業系統統計:Oracle 捕獲OS 資訊並記錄在v$osstat 檢視中。

l  附加的SQL 統計:

l  資料庫度量:

在效能診斷中,v$ 檢視中統計值的改動比例(度量)比積累值更重要,Oracle 提供了度量資訊的檢視:v$sysmetric v$sessmetric v$metricname v$filemetric v$eventmetric v$waitclassmetric  

2.        新的後臺程式

l  Oracle 10g 中新增兩個後臺程式:MMON MMNL 

1.          MMON :(Manageablility Monitor )負責各種可管理性任務,例如指定時間間隔內各種統計資訊的快照,MMON 可產生多個從屬程式執行任務。

2.        MMNL :(Manageablility Monitor - Lightweight )負責計算各種度量,並且獲得每秒活動會話的快照。

3.        AWR Automatic Workload Repository 

l  Oracle 10g 中,AWR 使用MMON 程式收集資訊,每隔60min 一次,收集的資訊儲存在sys 模式中的WRI_ Workload Repository Internal )、WRH_ Workload Repository Historical )、WRM_ Workload Repository Metadata )開頭的表中,通過DBA_HIST_ 開頭的檢視來訪問這些表。

l  可以通過EM 訪問AWR 資訊,或者使用dbms_workload_repository 程式包手工管理AWR 

l  修改快照設定(引數的單位都是min ):

        前面的dbms_workload_repository省略。

.modify_snapshot_settings(interval=>30,retention=>15*1440);

其中:interval 必須是10 分鐘到100 年之間的數。但如果設為,則表示禁用快照機制,此時為此引數設定一個巨大數(41050 天)。Retention 必須是1天到100 年之間的數。如果設為,則表示永久儲存,此時使用引數40150 天。

可以從dba_hist_wr_control 中檢視引數的設定。

l  建立快照,可以使用過程或函式:

使用過程:exec .create_snapshot();

使用函式:select .create_snapshot( ALL ) from dual;

函式返回值是建立的snapshot id ,可選引數ALL TYPICAL 控制快照級別(flush_level )。

l  刪除快照,必須提供開始快照和結束快照:

Exec .drop_snapshot_range(low_snap_id=>111,high_snap_id=>222);

使用dba_hist_snapshot 可以列出所有的快照資訊。

l  建立基線,必須提供開始和結束的快照號,以及基線名:

使用過程:Exec .create_baseline(start_snap_id=>111,end_snap_id=>222, baseline_name=> xxx );

使用函式:select .create_baseline(111,222, xxx ) from dual;

函式的返回值是基線的編號,基線存在期間,其內部的快照一直被儲存。

l  刪除基線:exec .drop_baseline( xxx ,true);

其中:xxx 表示基線的名稱,true 表示級聯刪除基線包含的snapshot 

4.        ASH Active Session History 

l  ASH 資訊由v$active_session_history 檢視可以檢視,ASH 的歷史資訊由AWR 寫入到資料檔案中,可以從dba_hist_active_sess_history 檢視。V$active_session_history 取樣的是當前一段時間內的資訊,dba_hist_active_sess_history 是對此資訊的進一步採集,其基表是WRH$_ACTIVE_SESSION_HISTORY 預設此表一小時重新整理一次。

l  ASH 在記憶體中的緩衝區大小計算公式為:

ASH Buffer=max(min(cpu_count*2M,5%*shared_pool_size,30M),1M)

簡化:ASH Buffer=min(cpu_count*2M,5%*shared_pool_size,30M)

l  ASH 相關引數都是隱含引數,使用前必須注意:

1)         _ash_enable :控制是否開啟ASH ,如果false ,則禁用ASH 

2)      _ash_disk_write_enable :是否將磁碟資訊寫入AWR 資訊庫,如果false ,則不儲存歷史ASH 資訊。

3)      _ash_size :控制ASH 緩衝區的大小。

l  訪問ASH 在記憶體中資訊時,也是需要獲取解析等相關的鎖存器的,如果存在相關鎖存器的等待,那麼就不能用SQL 語句來訪問ASH 資訊了,此時可以使用ASHDUMP ,將ASH資訊轉儲成追蹤檔案(要sysdba 身份):

Oradebug setmypid

Oradebug unlimit

Oradebug dump ashdump 10

Oradebug tracefile_name

l  或者使用alter session 命令達到同樣的目的:

Alter session set event  immediate trace name ashdump,level 10 ;

5.        ADDM Automatic Database Diagnostic Monitor ,自動資料庫診斷監視器)

l  ADDM 推薦的解決方法主要是為了獲取較低的DB 時間。

l  初始化引數statistics_level 必須被設定為typical (預設)、all ,來啟用ADDM ,如果設定為basic ,則禁用ADDM 和其他許多功能。

l  還有引數dbio_expected ,此引數不是初始引數,而是ADDM 任務引數,表示讀取單個資料塊的平均時間,其設定過程為:

l  exec dbms_advisor.set_default_task_parameter

(ADDM ,DBIO_EXPECTED ,30000);

此時dbio_expected=30000 微秒(30 毫秒),這是速度比較慢的磁碟。

可以從dba_advisor_def_parameters 檢視此引數的資訊。

l  可以使用EM 或者DBMS_ADVISOR 包或者addmrpt.sql 指令碼來生成ADDM 報告,生成報告的使用者必須具有advisor 許可權。

l  使用DBMS_ADVISOR 程式包的具體步驟:

1)         使用create_task 過程建立任務

2)      使用set_task_parameter 設定start_snapshot end_snapshot 引數。

3)      使用execute_task 執行任務

4)      使用get_task_report 獲取任務報告。

l  ADDM 相關的檢視:

Dba_advisor_findings/log/rationale/recommendations/tasks

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

相關文章