1. 程式人生 > >oracle等待事件13——小結

oracle等待事件13——小結

在oracle的效能調優中常見的三個檢視是必須要熟悉的:v$system_event ,  v$session_event  ,  v$session_wait 。

1、v$system_event:

本檢視概括了例項各項事件的等待資訊。v$session_wait顯示了系統的當前等待項,v$system_event則提供了自例項啟動後各個等待事件的概括。常用於獲取系統等待資訊的歷史影象。而通過兩個snapshot獲取等待項增量,則可以確定這段時間內系統的等待項。

V$SYSTEM_EVENT中的常用列:
EVENT:    等待事件名稱
TOTAL_WAITS:   此項事件總等待次數
TIME_WAITED:  

此項事件的總等待時間(單位:百分之一秒)
AVERAGE_WAIT:  此項事件的平均等待用時(單位:百分之一秒)(time_waited/total_waits)
TOTAL_TIMEOUTS:此項事情總等待超時次數


示例:
1.檢視系統的各項等待,按總耗時排序 :

SQL> SELECT event,total_waits waits,total_timeouts timeouts, time_waited total_time,average_wait avg FROM V$SYSTEM_EVENT ORDER BY 4 DESC;

EVENT                                                  WAITS   TIMEOUTS TOTAL_TIME        AVG
---------------------------                        ---------- ---------- ---------- ----------
rdbms ipc message                      230184     201139   56165487        244
SQL*Net message from client     186814          0   35007514        187
jobq slave wait                               33646      32453   10392022        309
pmon timer                                    24483      24481    7233256        295
virtual circuit status                     2398       2397    7211623       3007
dispatcher timer                         1199       1199    7187756       5995
Queue Monitor Wait                   2335       2296    7068245       3027
smon timer                                  292        228    7017478      24032
wakeup time manager                876        424    6442029       7354
wait for unread message on       51817      51409    5326344        103
broadcast channel

EVENT                                            WAITS   TIMEOUTS TOTAL_TIME        AVG
---------------------------                 ---------- ---------- ---------- ----------

queue messages                         10567      10290    5317995        503
Queue Monitor Slave Wait            74         74     430501       5818
class slave wait                            293        293     331264       1131
Queue Monitor Task Wait            282        211     136186        483
db file sequential read               87363          0      93439          1
PX Idle Wait                                  305        302      61502        202
db file scattered read               11739          0       8187          1
control file sequential read        6785          0       7373          1

EVENT                                        WAITS   TIMEOUTS TOTAL_TIME        AVG
---------------------------                    ---------- ---------- ---------- ----------
control file parallel write            23750          0       4583          0
log file parallel write                   26899          0       3847          0
log file sync                               7558          8       2825          0
db file parallel write                 30893          0       2123          0
library cache load lock             206          0       1521          7
process startup                         343          0        467          1
log file switch completion         58          0        443          8


比如,通過checkpoint completed、log file switch(checkpoint incomplete)可以檢視檢查點程序的效能。通過log file parallel write、log file switch completed可以檢視聯機重做日誌檔案的效能。通過log file switch(archiving needed)事件可以檢查歸檔程序的效能。
找出瓶頸:
1。通過Statspack列出空閒事件。
2。檢查不同事件的等待時間開銷。
3。檢查每條等待記錄的平均用時,因為某些等待事件(比較log file switch completion)可能周
期性地發生,但發生時卻造成了嚴重的效能損耗。

2、v$session_wait:

這是一個尋找效能瓶頸的關鍵檢視。它提供了任何情況下session在資料庫中當前正在等待什麼(如果session當前什麼也沒在做,則顯示它最後的等待事件)。當系統存在效能問題時,本檢視可以做為一個起點指明探尋問題的方向。
V$SESSION_WAIT中,每一個連線到例項的session都對應一條記錄。
V$SESSION_WAIT中的常用列:
SID: session標識
EVENT: session當前等待的事件,或者最後一次等待事件。
WAIT_TIME: session等待事件的時間(單位,百分之一秒)如果本列為0,說明session當前session還未有任何等待。
SEQ#: session等待事件將觸發其值自增長
P1, P2, P3: 等待事件中等待的詳細資料
P1TEXT, P2TEXT, P3TEXT: 解釋說明p1,p2,p3事件


附註:
1.State欄位有四種含義﹕
(1)Waiting:SESSION正等待這個事件。
(2)Waited unknown time:由於設定了timed_statistics值為false,導致不能得到時間資訊。表示發生了等待,但時間很短。
(3)Wait short time:表示發生了等待,但由於時間非常短不超過一個時間單位,所以沒有記錄。
(4)Waited knnow time:如果session等待然後得到了所需資源,那麼將從waiting進入本狀態。


 Wait_time值也有四種含義:
值>0:最後一次等待時間(單位:10ms),當前未在等待狀態。
值=0:session正在等待當前的事件。
值=-1:最後一次等待時間小於1個統計單位,當前未在等待狀態。

值=-2:時間統計狀態未置為可用,當前未在等待狀態。


Wait_time和Second_in_wait欄位值與state相關:
(1)如果state值為Waiting,那麼wait_time值無用。Second_in_wait值是實際的等待時間(單位:秒)。
(2)如果state值為Wait unknow time,那麼wait_time值和Second_in_wait值都無用。
(3)如果state值為Wait short time,那麼wait_time值和Second_in_wait值都無用。
(4)如果state值為Waiting known time,那麼wait_time值就是實際等待時間(單位:秒),Second_in_wait值無用。


V$SESSION_WAIT中的連線列:

Column            View                  Joined Column(s)

  SID            V$SESSION                       SID


示例:
1.列出當前系統的等待事件 :

SQL>SELECT event, sum(decode(wait_time,0,1,0)) "Curr", sum(decode(wait_time,0,0,1)) "Prev", count(*)"Total" FROM v$session_wait GROUP BY event ORDER BY count(*);
EVENT                                                 Prev   Curr    Tot
--------------------------------------------- ----    -----        -----
PL/SQL lock timer                             0         1           1
SQL*Net more data from client      0         1           1
smon timer                                        0          1           1
pmon timer                                        0          1           1
SQL*Net message to client           2           0           2
db file scattered read                      2           0           2
rdbms ipc message                       0           7           7
Enqueue                                            0         12         12
pipe get                                              0         12         12
db file sequential read                   3          10         13
latch free                                           9           6           15
SQL*Net message from client    835     1380    2215


這個按事件和wait_time的分組查詢列出下列的資訊:
  多數的session都是空閒事件如:SQL*Net message from client, pipe get, PMON timer等。
session的cpu佔用可以通過上次session的非等待事件大致算出,除此問題外:看起來多數session沒有在等待什麼事情(難道他們都在幹活?)但其最後等待事件都是SQL*Net message from client。


 列出指定ID的等待事件 

select * from v$session_wait where sid=100;


 應用p1,p2,p3進行等待事件的分析

v$session_wait檢視的列代表的緩衝區忙等待事件如下:
P1—與等待相關的資料檔案的全部檔案數量。
P2—P1中的資料檔案的塊數量。
P3—描述等待產生原因的程式碼。

 例:select p1 "File #", p2 "Block #", p3 "Reason Code" from v$session_wait where event = 'buffer busy waits';
如果以上查詢的結果顯示一個塊在忙等待,以下的查詢將顯示這一塊的名稱和型別: 

select owner, segment_name, segment_type
from dba_extents where file_id = &P1 and &P2 between block_id and block_id + blocks -1;

我們也可以查詢dba_data_files以確定等待的檔案的file_name,方法是使用v$session_wait中的P1。
從v$session_wait中查詢P3(原因編碼)的值可以知道session等待的原因。原因編碼的範圍從0到300,下列為部分編碼所代表的事項:
0 塊被讀入緩衝區。
100 我們想要NEW(建立)一個塊,但這一塊當前被另一session讀入。
110 我們想將當前塊設為共享,但這一塊被另一session讀入,所以我們必須等待read()結束。
120 我們想獲得當前的塊,但其他人已經將這一塊讀入緩衝區,所以我們只能等待他人的讀入結束。
130 塊被另一session讀入,而且沒有找到其它協調的塊,所以我們必須等待讀的結束。緩衝區死鎖後這種情況也有可能產生。所以必須讀入塊的CR。
200 我們想新建立一個block,但其他人在使用,所以我們只好等待他人使用結束。
210 Session想讀入SCUR或XCUR中的塊,如果塊交換或者session處於非連續的TX模式,所以等待可能需要很長的時間。
220 在緩衝區查詢一個塊的當前版本,但有人以不合法的模式使用這一塊,所以我們只能等待。
230 以CR/CRX方式獲得一個塊,但塊中的更改開始並且沒有結束。
231 CR/CRX掃描找到當前塊,但塊中的更改開始並且沒有結束。


3、v$session_event:

本檢視記錄了每個session的每一項等待事件。由上文所知V$SESSION_WAIT顯示了session的當前等待事件,而V$SESSION_EVENT則記錄了session自啟動起所有的事件。
V$SESSION_EVENT中的常用列
 SID:session標識
 EVENT:session等待的事件
 TOTAL_WAITS:此session當前事件的總等待數
 TIME_WAITED:此session總等待時間(單位,百分之一秒)
 AVERAGE_WAIT:此session當前事件平均等待時間(單位,百分之一秒)
 TOTAL_TIMEOUTS:等待超時次數
其它用法與V$SESSION_WAIT相似,不詳述了
附註:
Oracle的等待事件是衡量Oracle執行狀況的重要依據及指標。等待事件的概念是在Oracle7.0.1.2中引入的,大致有100個等待事件。在Oracle 8.0中這個數目增加到了大約150個,在Oracle8i中大約有200個事件,在Oracle9i中大約有360個等待事件。主要有兩種類別的等待事件,即空閒(idle)等待事件和非空閒(non-idle)等待事件。
關於空閒事件和非空閒事件目前通過google可以搜尋到非常多詳盡的相關資訊,同時
Oracle Database Performance Tuning Guide and Reference中關於Wait Events也有非常詳盡的描述,在此就不多費口舌了。不過我在itpub論壇看到有熱心人整理的chm格式非空閒事件說明,有興趣的朋友可以下載,連結如下:

4、主要等待事件:

這個在前12篇文章中,我們基本上詳細瞭解了各種重要的非空閒等待事件,下面我主要列舉一下空閒等待事件,以供各位童鞋瞭解這些等待事件的意思。

空閒等待意味著oracle正在等待某種動作發生。有時,oracle程序在等待,實際上並不是因為忙而等待,而是因為沒有事情所以在等待。如:smon timer等待事件,smon程序的一些操作是每個一段時間輪詢執行的,在系統不忙的時候,這種操作也不會立即發生,而是等待計時器達到一個定時刻再來執行,這時候就會產生smon timer 等待事件。

我們要明白的是,只有很少的空閒等待時間與效能有關,大多數的空閒等待事件對效能沒有影響。

典型的空閒等待事件:

client message : 客戶機訊息

null event : null事件

pipe get : 管道取操作

SQL* NET message from  client : 來自客戶端的訊息

SQL*NET message to client : 傳送至客戶端的訊息

rdbms ipc message : 資料庫的ipc訊息

virrual circuit status : 虛擬環路狀態資訊

smon timer : smon 計時器

pmon timer : pmon計時器

dispacher timer :排程器計時器。

相關推薦

oracle等待事件13——小結

在oracle的效能調優中常見的三個檢視是必須要熟悉的:v$system_event ,  v$session_event  ,  v$session_wait 。 1、v$system_event: 本檢視概括了例項各項事件的等待資訊。v$session_wait顯示了系

Oracle等待事件之四---log相關等待事件

一、Log file parallel write 後臺程序LGWR負責將log buffer當中的資料寫入到REDO檔案中,以重用log buffer的資料。如果每個REDO LOG組裡面有2個以上的成員,那麼LGWR程序將會並行地將REDO資訊寫入到這些檔案中。 如果資

oracle-等待事件-詳解

概述 等待事件主要可以分為兩類,即空閒(IDLE)等待事件和非空閒(NON-IDLE)等待事件。 1). 空閒等待事件 Oracle正等待某種工作,在診斷和優化資料庫的時候,不用過多注意這部分事件。 2). 非空閒等待事件 專門針對 ORACLE 的活動,指資料庫任務或應用執行過程中發生

程序員筆記|全面解析Oracle等待事件的分類、發現及優化

ref 網絡問題 消失 upload 重新 性能 技術分享 enc ota 一、等待事件由來 大家可能有些奇怪,為什麽說等待事件,先談到了指標體系。其實,正是因為指標體系的發展,才導致等待事件的引入。總結一下,Oracle的指標體系,大致經歷了下面三個階段: 以命中率為主

Oracle local write wait等待事件

oracle local write wait Note 1: TypicallyDBWR has to free up some buffers when you want to read something from the disk.During this process the

oracle等待事件LOG FILE SYNC (awr)優化

dlink append 訪問性 wak date 告訴 wakeup 優先級 led log file sycn是ORACLE裏最普遍的等待事件之一,一般log file sycn的等待時間都非常短 1-5ms,不會有什麽問題,但是一旦出問題,往往都比較難解決。什麽時候會

Oracle RAC 等待事件

發現 pcm 需要 其他 一個數 通過 數據塊 包含 從數據 PCM資源相關的等待事件gc current/cr block request:這個等待事件說明申請實例要申請一個當前塊或CR塊,但是資源主實例的LMS進程還沒有響應它的請求。gc current/cr bloc

37 Oracle深度學習筆記——RAC的相關等待事件

37.Oracle深度學習筆記——RAC的相關等待事件 歡迎轉載,轉載請標明出處:http://blog.csdn.net/notbaron/article/details/50891037 在效能BENCHMARK中碰到的幾個等待事件: gc cr multi block request

Oracle資料庫技術支援】RAC效能分析 - gc buffer busy acquire 等待事件

概述 --------------------- gc buffer busy是RAC資料庫中常見的等待事件,11g開始gc buffer busy分為gc buffer busy acquire和gc buffer busyrelease。 gc buffer busy acquire是當sess

匪夷所思:罕見的 Oracle 全域性事務鎖等待事件分析

資料技術嘉年華等你來活動預告:11.16-17日,北京市東三環中路61號富力萬麗酒店,相聚資料技

Oracle 11g direct path read 等待事件的理解

在Oracle 11g中,全表掃描可能使用direct path read方式,繞過buffer cache,這樣的全表掃描就是物理讀了。 在10g中,都是通過gc buffer來讀的,所以不存在direct path read的問題。   direct path read較高的可能原因有:   1. 大

ORACLE AWR報告之 log file sync等待事件優化的總結【轉自ITPUB】

 來自白大師(白鱔)對log file sync等待事件優化的總結,供各位puber們學習參考:一、  log file sync平均等待事件時間超過7ms,如果等待時間過長,說明log write每次寫入的時間過長,如果能夠優化redo日誌檔案儲存,使之存放在更快的磁

Oracle 11g下重現library cache lock等待事件

SQL> select sid, event,wait_class, seconds_in_wait   2    from v$session_wait w   3   where w.WAIT_CLASS <> 'Idle';        SID EVENT              

Oracle常見的等待事件說明(上)

Oracle資料庫系統可移植性好、使用方便、功能強,適用於各類大、中、小、微機環境,因此,它廣受大資料圈相關人士的青睞。但是,在使用過程中,偶爾會遇到一些等待事件,這是為什麼呢?大聖眾包威客平臺為你一一道來。   1、Buffer busy waits   從本質

深入理解Oracle中的shared pool與library cache元件及相關等待事件

傳統的’library cache pin’在10.2.0.2之後預設被取代, 此處PIN被Mutex及其ref count取代。 當程序執行遊標語句時或者需要PIN,或者需要hard parse一個子遊標heap。在版本10.2.0.1中, 使用mutex部分程式碼替代PIN的功能預設是不啟用的,

Oracle常見的等待事件

Buffer busy waits    這個等待事件說明了一個會話在等待一個Buffer(資料塊),但是導致這個現象的原因卻有很多種。    在10g R1以前的版本中buffer busy waits包含兩種情況:     1)當一個會話檢視修改一個數據塊,但這個資

Oracle cursor pin S wait on X 等待事件 說明

這個等待事件也算一個常見的等待事件。 在warehouse blog和itpub 上有相關的2個帖子。 連線如下: cursor: pin S wait on X等待事件模擬 cursor

Oracle db file parallel write 和 log file parallel write 等待事件 說明

一. db file parallel write 等待事件 引自如下blog: db file parallel write The db file parallel write wait e

Oracle 常見等待事件

Oracle 操作的最小單位是塊(Block),即使你要修改一條記錄,也需要對這條記錄所在的這個資料塊做操作。 當你對這個資料塊做修改時,其他的會話將被阻止對這個資料塊上的資料做修改(即使其他使用者修改的不是當前使用者修改的資料),但是可以以一致性的方式讀取這個資料塊(from undo)。當前的使用者修改完

oracle資料庫等待事件

檢視等待事件select inst_id,event,count(*) from gv$session where wait_class <> 'Idle' group by inst_id,event order by 1,2; 1.1 等待事件主要可以分為兩