等待事件 wait event

2021-06-23 07:05:00 字數 1855 閱讀 8951

衡量資料庫狀況, 優化資料庫等

當乙個程序連線到資料庫後, 程序所經歷的種種等待就開始被記錄, 並且通過一系列的效能檢視進行展示, 通過等待事件使用者可以很快發現資料庫的效能瓶頸, 從而進行針對性能的優化和分析.

v$event_name

oracle 等待事件主要分兩類: 空閒等待(idle) 和 非空閒等待(non-idle)

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

非空閒等待: 專門針對oracle的活動, 指資料庫任務或應用執行過程中發生的等待, 這些等待事件是, 在調整資料庫時應該關注和研究的.

v$session, 記錄當前連線的 session 資訊

v$session_wait 記錄當前資料庫連線的活動session正在等待的資源或事件資訊

v$system_event 記錄資料庫自啟動以來所有等待事件彙總

v$sqltext, 通常資料庫出現瓶頸時, 可以通過v$session_wait找到正在等待資源的session, 通過session的sid, 聯合v$session 和 v$sqltext檢視就可以捕獲這些 session 正在執行的 sql 語句.

例如:1. select sid, event, p1, p1 text from v$session_wait;

2. select sql_text

from v$sqltext a

where a.hash_value = (select sql_hash_value from v$session b where b.sid = 『&sid』)

order by piece asc

3. 使用該使用者連線, 檢查sql 執行計畫

set autotrace trace explain

執行該(有問題的) sql 語句

發現問題, 比如全表掃瞄 等, 進一步分析原因, 比如在某列上沒有索引導致, 處理問題

4. 檢查問題是否解決完成

select sid, event, p1, p1 text from v$session_wait;

10g 以後, 新增加了 v$session_wait_history 檢視, 這樣就可以在檢視前一天是否有比較嚴重的等待事件, 也可以對比前一天和當天等待事件的不同.

ash 新特性(根本性變革)

如果說 v$session_wait_history 是一小步, 那麼 ash 則是一大步, ash 以 v$session為基礎, 每秒鐘取樣一次, 記錄活動會話等待事件.

利用 v$system_event 檢視

select * from (select event, time_waited from v$system_event order by time_waited desc)

where rownum < 10;

查詢最嚴重的前10個等待事件, 然後找出問題根源進行處理.(statspack report 中的 top 5 就是參考的這個)

db file sequential read 資料檔案順序讀取, user i/o 類, 如果這個等待事件比較顯著, 可能表示在多表連線中, 表的連線順序存在問題

db file scattered read 資料檔案離散讀取, user i/o 類,通常大量的 db file scattered read 等待可能意味著應用問題或索引缺失.

direct path read/write 直接路徑讀/寫, 磁碟排序等會觸發, 臨時表空間使用肯定頻繁(排序麼肯定使用臨時表空間), 這時候可以適當增大臨時表空間, 修改引數.

enqueue: 佇列等待, 對共享資源的鎖定機制, 例如: enq: pw – flush prewarm buffers

latch free: 閂鎖釋放

等待事件 buffer busy waits

事件引數說明 事件號 145 事件名 buffer busy waits 引數一 file 引數二 block 引數三 9i 原因碼,10g block class 事件說明 一 oracle會話正在等待pin住乙個緩衝區,會話必須在讀取或修改緩衝區之前將該緩衝區pin住。二 在任何時侯只有乙個程序...

GC Blocks Lost等待事件

在oracle rac環境中,無論我們從awr自動負載效能報告 statspack或者grid control中都可以找到oracle資料庫軟體所收集的全域性快取工作負載統計資訊 global cache work load statistics 其中就包含了全域性快取塊丟失 global cach...

ORACLE 等待事件

1 gc current block 2 way 乙個例項請求對當前節點 主控節點 中的乙個資料塊進行修改,該資料塊又因為修改已快取在另一節點中。存在 寫 寫 爭用 2 gc current block 3 way 乙個例項請求對當前訪問的乙個資料塊進行修改,主控節點收到請求,將訊息發給當前塊的擁有...