Oracle 常見的幾種等待事件

2021-10-05 17:32:48 字數 1132 閱讀 2018

等待事件分為主動觸發事件與被動觸發事件。

主動觸發事件:發生一次就進性一次記錄,例如io等

被動觸發事件:例如latch的獲取,只有當遇到阻塞時,獲取不到時,才會記錄該等待事件,如果沒有阻塞,即使獲取的時間再長,也不會記錄該事件。

讀不阻塞寫,寫阻塞讀。等待的元凶只能是dml語句

因為當乙個使用者a讀取buffer時,首先獲得cbc latch,然後修改buffer pin的鎖為共享模式,然後釋放cbc latch,此時使用者b修改buffer,獲得cbc latch,發現buffer pin上有共享鎖,會轉殖乙個這個buffer,轉殖後,源buffer的狀態改為cr,新複製的buffer狀態改為xcur,修改新複製的buffer 的buffer pin為獨佔模式,新複製的buffer用於修改。當此時再有乙個使用者c讀取buffer時,發現新複製的buffer上有獨佔buffer pin。所以只能等待,會產生buffer busy wait。

如果log buffer中沒有空間,程序會先等待lgwr重新整理log buffer中的空間。

當dbwr寫髒塊時,會將髒塊從檢查點佇列中移到各個物件的物件鍊錶上進行合併(整合),如果一次性要寫入的髒塊太多,oracle會分批進行合併,也就是將要寫入的髒塊分成幾個batch,然後分別依次對每個batch進行合併,當第乙個batch開始寫髒塊前,dbwr會記錄乙個等待事件db file parallel write,直到這乙個batch所有髒塊的寫操作都完成了,db file parallel write事件才結束。可以通過db file parallel write 確定batch的個數。

物件鍊錶:用於寫io合併

當伺服器程序掃瞄lru鍊錶尋找可用塊時,如果找了百分之40的buffer(百分之40受_db_block_max_scan_pct控制)還沒有找到可以覆蓋的buffer,程序將停止繼續掃瞄lru,喚醒dbwr寫髒塊,同時程序轉入睡眠,開始等待free buffer waits。

日誌切換等待,需要等待dbwr寫完下乙個要覆蓋的日誌中髒塊。

全表掃瞄等多塊讀訪問路徑觸發的等待事件

單塊讀訪問路徑觸發的等待事件

將資料塊直接讀取到pga中而不是sga,當出現該等待事件時,意味著pga空閒空間不足。

直接從pga寫入磁碟檔案上,不經過sga

陸續補充!

Oracle中常見等待事件的說明

oracle中常見等待事件的說明 buffer busy waits 指出等待資料庫緩衝區快取記憶體中的緩衝區。這表示某個會話正把這個緩衝區讀入快取記憶體和 或修改它。也可能是支援許多併發insert操作的表上缺乏足夠的空閒列表的表徵 db file parallel write 指出與dbwr程序...

ORACLE 等待事件

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

Oracle 等待事件解讀

oracle olap和oltp解讀 oracle index索引解讀 oracle 分割槽表解讀 oracle 鎖解讀 oracle 等待事件解讀 oracle procedure cursor解讀 等待事件主要可以分為兩類,即空閒 idle 等待事件和非空閒 non idle 等待事件。1 空閒...