一. 等待事件的相關知識
在Oracle
SQL> desc v$event_name;
名稱 是否為空? 類型
EVENT# NUMBER
EVENT_ID NUMBER
NAME VARCHAR
PARAMETER
PARAMETER
PARAMETER
WAIT_CLASS_ID NUMBER
WAIT_CLASS# NUMBER
WAIT_CLASS VARCHAR
SQL> select count(*) from v$event_name;
COUNT(*)
sys@ORCL> select count(*) from v$event_name;
COUNT(*)
SQL> select count(*) from v$event_name;
COUNT(*)
/* Formatted on
SELECT wait_class#
wait_class_id
wait_class
COUNT ( * ) AS "count"
FROM v$event_name
GROUP BY wait_class#
ORDER BY wait_class#;
WAIT_CLASS# WAIT_CLASS_ID WAIT_CLASS count
V$SESSION
V$SESSION_WAIT
V$SESSION_WAIT_HISTORY
V$SQLTEXT
通過SESSION的SID
V$ACTIVE_SESSION_HISTORY:是ASH的核心
WRH#_ACTIVE_SESSION_HISTORY: 是V$ACTIVE_SESSION_HISTORY在AWR的存儲地
V$ACTIVE_SESSION_HISTORY中 的信息會被定期(每小時一次)的刷新到負載庫中
用於分析
DBA_HIST_ACTIVE_SESS_HISTORY:視圖是WRH#_ACTIVE_SESSION_HISTORY視圖和其他幾個視圖的聯合展現
V$SYSTEM_EVENT: 由於V$SESSION記錄的是動態信息
息
二.
從本質上講
常見的兩種是
· 當一個會話試圖修改一個數據塊
· 當一個會話需要讀取一個數據塊
Oracle 操作的最小單位是塊(Block)
當一個會話修改一個數據塊時
· 以排他的方式獲得這個數據塊(Latch)
· 修改這個數據塊
· 釋放Latch
Buffer busy waits等待事件常見於數據庫中存在熱塊的時候
這個等待事件有三個參數
/* Formatted on
SELECT name
parameter
parameter
parameter
FROM v$event_name
WHERE name =
NAME PARAMETER
buffer busy waits file# block# class#
在下面的示例中
File#: 等待訪問數據塊所在的文件id號
Blocks
ID
內 存中數據塊的存放位置是記錄在一個hash列表(cache buffer chains)當中的
產生buffer latch的等待事件的主要原因是
· Buffer chains太長
· 同樣的數據塊被頻繁訪問
產生buffer chains太長
這個等待事件有兩個參數
Latch addr
通過以下的SQL語句可以根據這個地址找到它對應的Latch名稱
/* Formatted on
select * from v$latch a
addr=latch addr
and a
chain#
當數據庫中有多個控制文件的拷貝時
控制文件頻繁寫入的原因很多
· 日志切換太過頻繁
· 系統I/O 出現瓶頸
當系統出現日志切換過於頻繁的情形時
當系統出現大量的control file parallel write 等待事件時
這個等待事件包含三個參數
Files
Blocks
Requests
當數據庫需要讀取控制文件上的信息時
備份控制文件
RAC 環境下不同實例之間控制文件的信息共享
讀取控制文件的文件頭信息
讀取控制文件其他信息
這個等待事件有三個參數
File#
Block#
Blocks
這是一個很容易引起誤導的等待事件
這個等待事件包含三個參數
Files
Blocks
Requests
這是一個後台等待事件
DBWR 會批量地將髒數據並行地寫入到磁盤上相應的數據文件中
當出現db file parallel write等待事件時
這個等待事件有兩個參數
Requests
Timeouts
這 個等待事件在實際生產庫中經常可以看到
這個名稱中的scattered( 分散)
這裡的scattered指的是讀取的數據塊在內存中的存放方式
這個等待事件有三個參數
File#
Block#
Blocks
這個等待事件在實際生產庫也很常見
這裡的sequential也並非指的是Oracle 按順序的方式來訪問數據
這個等待事件有三個參數
File#
Block#
Blocks
這個等待事件通常只發生在一種情況下
當這個等待事件很明顯時
這個等待事件有三個參數
File#: 需要更新的數據塊所在的數據文件的文件號
Block#
Blocks
這 個等待事件發生在會話將數據塊直接讀取到PGA當中而不是SGA中的情況
當發生direct path read等待事件時
這個等待事件有三個參數
Descriptor address: 一個指針
First dba: descriptor address 中最舊的一個I/O數據塊地址
Block cnt: descriptor address上下文中涉及的有效的buffer 數量
這個等待事件和direct path read 正好相反
這種情況通常發生在
使用臨時表空間排序(內存不足)
數據的直接加載(使用append方式加載數據)
並行DML操作
這個等待事件有三個參數
Descriptor address: 一個指針
First dba: descriptor address 中最舊的一個I/O數據塊地址
Block cnt: descriptor address 上下文中涉及的有效地 buffer 數量
Enqueue 這個詞其實是lock 的另一種描述語
當我們在AWR 報告中發現長時間的enqueue 等待事件時
這個等待事件有
Name
Mode
可以使用如下SQL 查看當前會話等待的enqueue名稱和類型
/* Formatted on
SELECT CHR (TO_CHAR (BITAND (p
|| CHR (TO_CHAR (BITAND (p
"Lock"
TO_CHAR (BITAND (p
FROM v$session_wait
WHERE event =
Oracle 的enqueue 包含以下模式
模式代碼
解釋
Null (NULL)
Row
Row
Share(S)
S/Row
Exclusive(X)
Oracle的enqueue 有如下類型
Enqueue 縮寫
縮寫解釋
BL
Buffer Cache management
BR
Backup/Restore
CF
Controlfile transaction
CI
Cross
CU
Bind Enqueue
DF
Datafile
DL
Direct Loader Index Creation
DM
Database Mount
DR
Distributed Recovery Process
DX
Dirstributed Transaction
FP
File Object
FS
File Set
HW
High
IN
Instance Number
IR
Instance Recovery
IS
Instance State
IV
Library Cache Invalidation
JI
Enqueue used during AJV snapshot refresh
JQ
Job Queue
KK
Redo Log “Kick”
KO
Multiple Object Checkpoint
L[A
Library Cache Lock
LS
Log start or switch
MM
Mount Definition
MR
Media recovery
N[A
Library Cache bin
PE
Alter system set parameter =value
PF
Password file
PI
Parallel slaves
PR
Process startup
Parallel slave synchronization
Q[A
Row Cache
RO
Object Reuse
RT
Redo Thread
RW
Row Wait
SC
System Commit Number
SM
SMON
Sequence Number
SQ
Sequence Number Enqueue
SR
Synchronized replication
Sort segment
ST
Space management transaction
SV
Sequence number Value
TA
Transaction recovery
TC
Thread Checkpoint
TE
Extend Table
TM
DML enqueue
TO
Temporary Table Object Enqueue
TS
Temporary Segement(also TableSpace)
TT
Temporary Table
TX
Transaction
UL
User
UN
User name
US
Undo segment
WL
Being Written Redo Log
XA
Instance Attribute Log
XI
Instance Registration Lock
關於enqueue 可以參考如下的連接
Wait Events
當 一個會話將數據塊從磁盤讀到內存中時
當數據庫中出現比較嚴重的free buffer waits等待事件時
(
(
這個等待事件包含
File#
Block#
在
SQL> select name from v$event_name where name like
NAME
latch activity
latch free
latch: Change Notification Hash table latch
latch: In memory undo latch
latch: MQL Tracking Latch
latch: PX hash array latch
latch: Undo Hint Latch
latch: WCR: processes HT
latch: WCR: sync
latch: cache buffer handles
latch: cache buffers chains
latch: cache buffers lru chain
latch: call allocation
latch: change notification client cache latch
latch: checkpoint queue latch
latch: enqueue hash chains
latch: gc element
latch: gcs resource hash
latch: ges resource hash list
latch: lob segment dispenser latch
latch: lob segment hash table latch
latch: lob segment query latch
latch: messages
latch: object queue header operation
latch: parallel query alloc buffer
latch: redo allocation
latch: redo copy
latch: redo writing
latch: row cache objects
latch: session allocation
latch: shared pool
latch: undo global data
latch: virtual circuit queues
已選擇
sys@ORCL> select name from v$event_name where name like
NAME
latch activity
latch free
latch: Change Notification Hash table latch
latch: In memory undo latch
latch: KCL gc element parent latch
latch: MQL Tracking Latch
latch: Undo Hint Latch
latch: cache buffer handles
latch: cache buffers chains
latch: cache buffers lru chain
latch: checkpoint queue latch
latch: enqueue hash chains
latch: gcs resource hash
latch: ges resource hash list
latch: library cache
latch: library cache lock
latch: library cache pin
latch: messages
latch: object queue header heap
latch: object queue header operation
latch: parallel query alloc buffer
latch: redo allocation
latch: redo copy
latch: redo writing
latch: row cache objects
latch: session allocation
latch: shared pool
latch: undo global data
latch: virtual circuit queues
所以latch free 等待事件在
這個等待事件有三個參數
Address: 會話等待的latch 地址
Number
SQL> select * from v$latchname where latch#=number;
Tries: 會話嘗試獲取Latch 的次數
這個等待事件發生在不同用戶在共享中由於並發操作同一個數據庫對象導致的資源爭用的時候
這個事件包含四個參數
Handle address: 被加載的對象的地址
Lock address
Mode
Namespace
sys@ORCL> select name from v$event_name where name like
NAME
library cache load lock
library cache lock
library cache pin
library cache revalidation
library cache shutdown
這 個等待事件和library cache lock 一樣是發生在共享池中並發操作引起的事件
這個等待事件也包含四個參數
Handle address: 被加載的對象的地址
Lock address
Mode
Namespace
後台進程LGWR 負責將log buffer當中的數據寫到REDO 文件中
如果數據庫中出現這個等待事件的瓶頸
這個等待事件有三個參數
Files
Blocks
Requests
當log buffer 中沒有可用空間來存放新產生的redo log數據時
如果數據庫中出現大量的log buffer space等待事件
(
(
這個等待事件通常發生在對redo log信息進行讀取時
這個等待事件包含三個參數
Log#
Block#
Blocks
這個等待事件發生在更新redo log文件的文件頭時
這個等待事件包含三個參數
Log#
Block#
Blocks
在 歸檔模式下
出現這樣的等待事件通常是由於某種原因導致ARCH 進程死掉
這個等待事件沒有參數
當 一個在線日志切換到下一個在線日志時
在v$log 視圖裡記錄了在線日志的狀態
Active: 這個日志上面保護的信息還沒有完成checkpoint
Inactive
Current
Oracle 在做實例恢復時
如果系統中出現大量的log file switch(checkpoint incomplete)等待事件
這個等待事件沒有參數
這是一個用戶會話行為導致的等待事件
會話發出的commit指令後
當系統中出現大量的log file sync等待事件時
這種等待事件通常發生在OLTP系統上
這個等待事件包含一個參數
Buffer#: redo buffer 中需要被寫入到磁盤中的buffer
當出現這個等待事件時
這個等待事件包含兩個參數
Driver id: 服務器和客戶端連接使用的協議信息
Break?
這 個等待事件和SQL*Net break/reset to client 相同
這個等待事件有兩個參數
Driver id: 服務器和客戶端連接使用的協議信息
Break?
這個等待事件基本上是最常見的一個等待事件
很顯然
這個等待事件包含兩個參數
Driver id: 服務器端和客戶端連接使用的協議信息
#bytes: 服務器端接收到的來自客戶端消息的字節數
這個等待事件和SQL*Net message from client相同
這個等待事件也是一個空閒等待事件
這個事件包含兩個參數
Driver id: 服務器端和客戶端連接使用的協議信息
#bytes: 服務器端通過dblink 收到的來自另一個服務器端消息的字節數
這個等待事件發生在服務器端向客戶端發送消息的時候
這個等待事件有兩個參數
Driver id: 服務器端和客戶端連接使用的協議信息
#bytes: 服務器端向客戶端發送消息的字節數
這個等待事件和SQL*Net message to client 相同
這個等待時間包含兩個參數
Driver id: 服務器端和客戶端連接使用的協議信息
#bytes: 服務器端通過dblink發送給另一個服務器消息的字節數
服 務器端等待用戶發出更多的數據以便完成操作
這個等待時間包含兩個參數
Driver id: 服務器端和客戶端連接使用的協議信息
#bytes: 服務器端從客戶端接收到消息的字節數
在 一個分布式事務中
這個等待時間包含兩個參數
Driver id: 服務器端和客戶端連接使用的協議信息
#bytes: 服務器端通過dblink發送給另一個服務器消息的字節數
當服務器端有太多的數據需要發給客戶端時
這個等待時間包含兩個參數
Driver id: 服務器端和客戶端連接使用的協議信息
#bytes: 服務器端向客戶端發送消息的字節數
這 個等待事件和SQL*Net more data to client 等待時間基本相同
這個等待時間包含兩個參數
Driver id: 服務器端和客戶端連接使用的協議信息
#bytes: 服務器端通過dblink發送給另一個服務器消息的字節數
From:http://tw.wingwit.com/Article/program/Oracle/201311/19100.html