91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

latch:cache buffers chains的優化思路

發布時間:2020-08-06 22:44:34 來源:ITPUB博客 閱讀:247 作者:kunlunzhiying 欄目:關系型數據庫
    數據塊在buffer cache存放是以linked list方式存放的。當一個session想要訪問/修改buffer cache的block,首先需要通過hash算法檢查該block是否存在于buffer cache中,檢查相同的SQL語句是否存在于library cache中也是通過hash算法實現的。要判斷block是否存在于buffer cache中,就需要掃描linked list(此處都是串行的,不能并發),獲取block的信息。而掃描linked list必須獲得一個latch,防止并發對linked list照成破壞,如果未能獲得該latch,就會在數據庫中標記一個latch: cache buffers chains這個等待事件。如果該block存在于buffer cache中就不需要物理讀,如果不存在,就需要從磁盤讀取該block到buffer cache中。為了能夠讀取,并修改該block,我們就需要pin住該block,防止并發對于該block造成破壞,所以如果別的session不能獲得pin,同時會標記一個buffer busy waits等待事件。
一般產生CACHE BUFFERS CHAINS的原因有幾個方面:1、buffer cache太少(也說明SQL語句效率低);2、熱塊掙用。(從oracle9i開始,對latch:cache buffer chains支持只讀共享訪問,這可以減少部分爭用,但并不能完全消除爭用。)
一、buffer cache太少(也說明SQL語句效率低)
應用程序執行多個相同的低效率SQL語句并發會話,這些SQL語句都設法得到相同的數據集。較多的邏輯讀意味著較多的latch get操作,從而增加了鎖存器爭用。多個進程同時掃描大范圍的索引或表時,可能廣泛地發生cache buffers chains 鎖存器爭用。每次執行都帶有高 BUFFER_GETS(邏輯讀取)的SQL語句是主要的原因。
1、查看當前的等待事件 ( latch: cache buffers chains)
SQL> select event, count(*) from v$session
 where wait_class <> 'Idle' group by event order by 2;
2、查看 latch: cache buffers chains事件相關的會話信息
SQL> select sid,username,machine,program,p1raw,sql_id,logon_time,last_call_et from v$session where event='latch: cache buffers chains';
二、熱塊掙用
當多個會話重復訪問一個或多個由同一個子cache buffers chains鎖存器保護的塊時,就會產生熱塊掙用。當多個會話爭用cache buffers chains鎖存器時,找出是否有熱塊的最好的方法是檢查latch free等待事件的P1RAW參數值。
判斷熱塊掙用的另一種方法是從 v$session_wait 視圖獲得鎖存器地址后進行比較。v$session_wait的P1RAW就相當于子鎖存器地址,若從 v$session_wait 視圖獲得的鎖存器地址過多重復出現,就意味著對相應鎖存器發生次數偏多,此時可解釋為熱快引起的爭用。如果會話正在相同的鎖存器地址上等待,就是熱塊。
SQL> select sid,p1raw,p2,p3,seconds_in_wait,wait_time,state from v$session_wait
where event='latch: cache buffers chains' order by 3,2;
查看熱塊的對象:
根據TCH值確認熱塊。注意塊從LRU列表的冷端移動到熱端時,TCH值將重置為0,所以判斷的時候,要注意TCH為0的塊不一定是冷塊。
使用P1RAW=00000300DA316800為例子進行關聯熱快對象。
SQL> select a.hladdr,a.file#,a.dbablk,a.tch,a.obj,b.object_name from x$bh a, dba_objects b
where (a.obj = b.object_id or a.obj = b.data_object_id) and a.hladdr = '00000300DA316800'
union select hladdr,file#,dbablk,tch,obj,null from x$bh
where obj in (select obj from x$bh where hladdr = '00000300DA316800' minus select object_id from dba_objects minus select data_object_id from dba_objects) and hladdr = '00000300DA316800' order by 4;
若沒有關于SQL語句的信息,也有方法間接判斷是熱塊引起的問題,還是低效SQL語句引起的問題。v$latch_children視圖中,比較子cache buffers chains鎖存器相應的 child#、gets、sleeps值, 以此判斷特定子鎖存器上使用的次數和爭用是否集中,利用以下語句,獲取sleeps次數高的子鎖存器。
SQL> select * from (select addr, child#, gets, sleeps from v$latch_children where name = 'cache buffers chains' order by sleeps desc)
where rownum < =20;
當結果中sleeps的值傾斜較大的時候就說明是熱塊掙用。
根據sleeps較高的addr確定哪些塊是熱塊。
SQL> select hladdr,obj,(select object_name from dba_objects where (data_object_id is null and object_id = x.obj) or data_object_id = x.obj and rownum = 1) as object_name,dbarfil,dbablk,tch from x$bh x where hladdr ='&p1raw' order by hladdr, obj;

==============End========================================================
向AI問一下細節

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

AI

平顶山市| 边坝县| 南部县| 宜春市| 巴中市| 乐山市| 江门市| 喀什市| 自贡市| 浠水县| 方山县| 新巴尔虎右旗| 云和县| 肥乡县| 余庆县| 绥中县| 盐池县| 洪江市| 偏关县| 济宁市| 宁城县| 北安市| 岳池县| 镇康县| 贡嘎县| 礼泉县| 庆阳市| 调兵山市| 嘉禾县| 寿宁县| 涟水县| 农安县| 公主岭市| 阿拉善左旗| 仙居县| 英超| 茂名市| 虹口区| 靖边县| 曲阜市| 布尔津县|