Oracle-等待事件解读
概述
Oracle-OLAP和OLTP解讀
Oracle-index索引解讀
Oracle-分區表解讀
Oracle-鎖解讀
Oracle-等待事件解讀
Oracle-procedure/cursor解讀
等待事件主要可以分為兩類,即空閑(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 爭用。
等等…….
總結
以上是生活随笔為你收集整理的Oracle-等待事件解读的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Oracle增加修改删除字段/主键
- 下一篇: Oracle-内存管理解读