中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

oracle等待事件之free buffer waits

發布時間:2020-08-09 23:25:02 來源:ITPUB博客 閱讀:197 作者:水逸冰 欄目:關系型數據庫

1.什么時候會發生free buffer waits呢?
    簡單來說,當需要在buffer cache中尋找可用塊但是找不到時,就會發生這個等待。找尋可用塊的理由包括讀取數據塊到內存中,或者構造CR塊。
SQL> select name,parameter1,parameter2,parameter3,wait_class from v$event_name where name ='free buffer waits';

NAME                 PARAMETER1           PARAMETER2           PARAMETER3           WAIT_CLASS
-------------------- -------------------- -------------------- -------------------- --------------------
free buffer waits    file#                block#               set-id#              Configuration

2.Oracle讀取數據塊的過程
1)比如Oracle要讀取1號對象,2號文件,3號塊,首先根據對象號,文件號,塊號計算hash值,然后去搜索哈希表,確定是否目標數據塊已經存在在內存中。這里的hash表是CBC鏈的header的集合。
2)根據計算出的hash值得到bucket的內存,然后去掃描這個bucket的CBC鏈,掃描的時候會在CBC latch的保護下,依次對比結果,如果匹配,那么取得BA地址,讀取buffer。
3)如果不存在,那么需要在LRU鏈上尋找可重用的塊,在掃描過程中,被pin住的塊,TCH大于2的塊和臟塊不會被重用,pin住的塊會被跳過,TCH大于2的塊會被移動到LRU鏈表的熱端,TCH小于2的臟塊會被移動到LRUW鏈,當掃描到LRU鏈的40%時,40%是由隱含參數_db_block_max_scan_pct控制的,此時若還沒有找到可覆蓋的buffer,將會停止掃描,喚醒DBWR進程寫臟塊,同時前臺進程轉入睡眠狀態,此時的等待事件就是free buffer waits。
4)如果找到可覆蓋的buffer,那么在下一步之前會首先根據臟塊的總數,決定是否主動喚醒DBWR進程寫臟塊,如果臟塊數占到了檢查點隊列的25%,那么不等DBWR進程3秒醒來,而是主動喚醒。25%是由隱含參數_db_large_dirty_queue決定的。主動喚醒是不會有free buffer waits等待的。
5)DBWR進程被喚醒或者3秒醒來寫臟塊后,將可重用的臟塊掛到輔助LRU鏈表上。
從上述過程可以看到,隱含參數_db_block_max_scan_pct隱含參數通過控制臟塊數目,主動喚醒DBWR寫臟塊,有助于緩解free buffer waits事件。

產生free buffer waits的原因?
1)db_cache_size值太小
2)檢查db_writer_processes參數,一般來說這個值不太會主動修改,默認每8個CPU會有一個dbwr進程
3)存儲性能有問題,可能寫臟數據慢,可能寫redo慢
4)延遲塊清除,這種行為可能會占用大量的buffer
5)sql效率差,物理讀過大或者要構造的CR塊過多,比如大表select *,笛卡爾積等

上述讀取數據塊的過程中提到過掃描LRU鏈的時候跳過的塊的情況可以這么查:
SQL>  select * from v$sysstat where name in ('free buffer inspected','free buffer requested');
STATISTIC# NAME                                CLASS      VALUE    STAT_ID     CON_ID
---------- ------------------------------ ---------- ---------- ---------- ----------
       206 free buffer requested                   8 1134972512 3411924934          0
       210 free buffer inspected                   8  366218879  941676439          0

SQL> select 366218879/1134972512 from dual;

366218879/1134972512
--------------------
           .32266762
free buffer inspected:掃描LRU鏈尋找可重用的塊時候跳過的塊的個數
free buffer requested:請求重用塊的次數
上述結果表明平均每次請求掃描0.32個塊,也就是說一般馬上就能拿到重用塊。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

乌海市| 青海省| 上栗县| 延庆县| 进贤县| 华容县| 诸城市| 寻乌县| 东乌| 双牌县| 黄浦区| 顺义区| 红原县| 诸暨市| 灵台县| 江源县| 莎车县| 清水河县| 安龙县| 香港| 五华县| 普兰县| 杭锦旗| 唐山市| 顺昌县| 建阳市| 鄄城县| 县级市| 西林县| 花垣县| 分宜县| 鄂托克前旗| 拜城县| 鹤峰县| 沛县| 积石山| 静安区| 怀安县| 岐山县| 邵武市| 清原|