天天看點

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 争用。

等等…….