Oracle-等待事件解读
概述
Oracle-OLAP和OLTP解讀
Oracle-index索引解讀
Oracle-分區(qū)表解讀
Oracle-鎖解讀
Oracle-等待事件解讀
Oracle-procedure/cursor解讀
等待事件主要可以分為兩類,即空閑(IDLE)等待事件和非空閑(NON-IDLE)等待事件。
1). 空閑等待事件
ORACLE正等待某種工作,在診斷和優(yōu)化數(shù)據(jù)庫的時候,不用過多注意這部分事件。
2). 非空閑等待事件
專門針對 ORACLE 的活動,指數(shù)據(jù)庫任務(wù)或應(yīng)用運行過程中發(fā)生的等待,這些等待事件是在調(diào)整數(shù)據(jù)庫的時候需要關(guān)注與研究的。
在 Oracle 10g 中的等待事件可以通過 v$event_name 視圖來查看等待事件的相關(guān)信息。
常見等待事件
Buffer busy waits
從本質(zhì)上講,這個等待事件的產(chǎn)生僅說明了一個會話在等待一個 Buffer(數(shù)據(jù)塊),但是導(dǎo)致這個現(xiàn)象的原因卻有很多種。
常見的兩種是:
- 當(dāng)一個會話視圖修改一個數(shù)據(jù)塊,但這個數(shù)據(jù)塊正在被另一個會話修改時
- 當(dāng)一個會話需要讀取一個數(shù)據(jù)塊,但這個數(shù)據(jù)塊正在被另一個會話讀取到內(nèi)存中時。
Oracle 操作的最小單位是塊( Block),即使你要修改一條記錄,也需要對這條記錄所在的這個數(shù)據(jù)塊做操作。
當(dāng)一個會話修改一個數(shù)據(jù)塊時,是按照以下步驟來完成的:
( 1) 以排他的方式獲得這個數(shù)據(jù)塊( Latch)
( 2) 修改這個數(shù)據(jù)塊。
( 3) 釋放 Latch。
Buffer latch
內(nèi)存中數(shù)據(jù)塊的存放位置是記錄在一個 hash 列表( cache buffer chains)當(dāng)中的。
當(dāng)一個會話需要訪問某個數(shù)據(jù)塊時,它首先要搜索這個 hash 列表,從列表中獲得數(shù)據(jù)塊的地址,然后通過這個地址去訪問需要的數(shù)據(jù)塊,這個列表 Oracle會使用一個 latch 來保護它的完整性。
當(dāng)一個會話需要訪問這個列表時,需要獲取一個 Latch,只有這樣,才能保證這個列表在這個會話的瀏覽當(dāng)中不會發(fā)生變化。
產(chǎn)生 buffer latch 的等待事件的主要原因是:
- ( 1) Buffer chains 太長,導(dǎo)致會話搜索這個列表花費的時間太長,使其他的會話處于等待狀態(tài)。
- ( 2) 同樣的數(shù)據(jù)塊被頻繁訪問,就是我們通常說的熱快問題。
Control file parallel write
控制文件頻繁寫入的原因很多,比如:
( 1) 日志切換太過頻繁,導(dǎo)致控制文件信息相應(yīng)地需要頻繁更新。
( 2) 系統(tǒng) I/O 出現(xiàn)瓶頸,導(dǎo)致所有 I/O 出現(xiàn)等待。
當(dāng)系統(tǒng)出現(xiàn)日志切換過于頻繁的情形時,可以考慮適當(dāng)?shù)卦龃笕罩疚募拇笮斫档腿罩厩袚Q頻率。
當(dāng)系統(tǒng)出現(xiàn)大量的 control file parallel write 等待事件時,可以通過比如降低控制文件的拷貝數(shù)量,將控制文件的拷貝存放在不同的物理磁盤上的方式來緩解I/O 爭用。
等等…….
總結(jié)
以上是生活随笔為你收集整理的Oracle-等待事件解读的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Oracle增加修改删除字段/主键
- 下一篇: Oracle-内存管理解读