1. 程式人生 > >oracle-等待事件-詳解

oracle-等待事件-詳解

概述

等待事件主要可以分為兩類,即空閒(IDLE)等待事件和非空閒(NON-IDLE)等待事件。

1). 空閒等待事件

Oracle正等待某種工作,在診斷和優化資料庫的時候,不用過多注意這部分事件。

2). 非空閒等待事件

專門針對 ORACLE 的活動,指資料庫任務或應用執行過程中發生的等待,這些等待事件是在調整資料庫的時候需要關注與研究的。

在 Oracle 10g 中的等待事件可以通過 v$event_name 檢視來檢視等待事件的相關資訊。

常見等待事件

Buffer busy waits

從本質上講,這個等待事件的產生僅說明了一個會話在等待一個 Buffer(資料塊),但是導致這個現象的原因卻有很多種。

常見的兩種是:

  • 當一個會話檢視修改一個數據塊,但這個資料塊正在被另一個會話修改時
  • 當一個會話需要讀取一個數據塊,但這個資料塊正在被另一個會話讀取到記憶體中時。

Oracle 操作的最小單位是塊( Block),即使你要修改一條記錄,也需要對這條記錄所在的這個資料塊做操作。

當一個會話修改一個數據塊時,是按照以下步驟來完成的:
( 1) 以排他的方式獲得這個資料塊( Latch)
( 2) 修改這個資料塊。
( 3) 釋放 Latch。

Buffer latch

記憶體中資料塊的存放位置是記錄在一個 hash 列表( cache buffer chains)當中的。

當一個會話需要訪問某個資料塊時,它首先要搜尋這個 hash 列表,從列表中獲得資料塊的地址,然後通過這個地址去訪問需要的資料塊,這個列表 Oracle會使用一個 latch 來保護它的完整性。

當一個會話需要訪問這個列表時,需要獲取一個 Latch,只有這樣,才能保證這個列表在這個會話的瀏覽當中不會發生變化。

產生 buffer latch 的等待事件的主要原因是:

  • ( 1) Buffer chains 太長,導致會話搜尋這個列表花費的時間太長,使其他的會話處於等待狀態。
  • ( 2) 同樣的資料塊被頻繁訪問,就是我們通常說的熱快問題。

Control file parallel write

控制檔案頻繁寫入的原因很多,比如:
( 1) 日誌切換太過頻繁,導致控制檔案資訊相應地需要頻繁更新。
( 2) 系統 I/O 出現瓶頸,導致所有 I/O 出現等待。

當系統出現日誌切換過於頻繁的情形時,可以考慮適當地增大日誌檔案的大小來降低日誌切換頻率。

當系統出現大量的 control file parallel write 等待事件時,可以通過比如降低控制檔案的拷貝數量,將控制檔案的拷貝存放在不同的物理磁碟上的方式來緩解I/O 爭用。

等等…….