日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

Oracle latch: cache buffers chains

發布時間:2023/12/14 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Oracle latch: cache buffers chains 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

buffer?cache深度分析之buffer?cache的優化

?

buffer cache的等待事件
??? 與buffer cache相關的等待事件包括:latch free、buffer busy waits、free buffer waits。曾經發生過的等待事件可以從v$system_event(一個等待事件對應一行記錄)和v$session_event(一個session一個等待事件對應一行記錄)中看到。而當前系統正在經歷的等待事件可以從v$session_wait看到。

latch free等待
???????等待事件“latch free”中與buffer cache有關的有兩類:cache buffers chains latch和cache buffers lru chain latch。在理解了上面所描述的有關buffer cache的內部管理機制以后,就應該很容易理解這兩個latch產生的原因。

??? 對于buffer cache中的每個hash chain鏈表來說,都會有一個名為cache buffers chains latch的latch來保護對hash chain的并發操作,這種latch通常也叫作hash latch或CBC latch。數據庫中會有很多的cache buffers chains latch,每個latch都叫做child cache buffers chains latch。一個child cache buffers chains latch會管理多個hash chain。前面我們知道,hash chain的數量由一個隱藏參數:_db_block_hash_buckets決定。同樣也有一個隱藏參數:_db_block_hash_latches來決定有多少個cache buffers chains latch來管理這些hash chain。該參數的缺省值由buffer cache中所含有的內存數據塊的多少決定,當內存數據塊的數量
???? ?少于2052個時,_db_block_hash_latches = power(2,trunc(log(2, 內存塊數量 - 4) - 1))
??? ?多于131075個時,_db_block_hash_latches = power(2,trunc(log(2, db_block_buffers - 4) - 6))
??? ?位于2052與131075 buffers之間,_db_block_hash_latches = 1024
可以使用下面的SQL語句來確定當前系統的cache buffers chains latch的數量。

?SQL>?select?count(distinct(hladdr)) from?x$bh; COUNT(DISTINCT(HLADDR)) ----------------------- ?1024?SQL>?select?count(*) from?v$latch_children where?name='cache buffers chains'; ?COUNT(*) ---------- ?1024

?

??? ?在知道了cache buffers chains latch的數量以后,我們只需要用hash chain的數量除以latch的數量以后,就可以算出每個latch管理多少個hash chain了。我們將下面7532除以1024,就可以知道,當前的系統中,每個latch大概對應8個hash chain。

?SQL>?select?x.ksppinm, y.ksppstvl, x.ksppdesc ?2?from?x$ksppi x , x$ksppcv y where?x.indx =?y.indx and?x.ksppinm like?'\_%'?escape?'\'??and?ksppinm like?'%_db_block_hash_buckets%'?; KSPPINM KSPPSTVL KSPPDESC ---------------------- -------- ------------------------------------- _db_block_hash_buckets 7523?Number?of?database?block hash buckets

?

??? 當數據庫在hash chain搜索需要的數據塊時,必須先獲得cache buffers chains latch。然后在掃描hash chain的過程中會一直持有該latch,直到找到所要的數據塊才會釋放該latch。當有進程一直在掃描某條hash chain,而其他進程也要掃描相同的hash chain時,其他進程就必須等待類型為cache buffers chains latch的latch free等待事件。

??? 不夠優化的SQL語句是導致cache buffers chains latch的主要原因。如果SQL語句需要訪問過多的內存數據塊,那么必然會持有latch很長時間。找出邏輯讀特別大的sql語句進行調整。v$sqlarea里那些buffer_gets/executions為較大值的SQL語句就是那些需要調整的SQL語句。這種方式不是很有針對性,比較盲目。網上曾經有人提供了一個比較有針對性的、查找這種引起較為嚴重的cache buffers chains latch的SQL語句的方式,其原理是根據latch的地址,到x$bh中找對應的buffer header,x$bh的hladdr表示該buffer header所對應的latch地址。然后根據buffer header可以找到所對應的表的名稱。最后可以到v$sqltext(也可以到stats$sqltext)中找到引用了這些表的SQL語句。我也列在這里。where條件中的rownum<10主要是為了不要返回太多的行,只要能夠處理掉前10個latch等待就能有很大改觀。

?select?/**//*+ rule */?s.sql_text from?x$bh a,dba_extents b, (select?*?from?(select?addr from?v$latch_children ?where?name =?'cache buffers chains'?order?by?sleeps desc) where?rownum<11) c, v$sqltext s where?a.hladdr =?c.addr ?and?a.dbarfil =?b.relative_fno ?and?a.dbablk between?b.block_id and?b.block_id +?b.blocks ?and?s.sql_text like?'%'||b.segment_name||'%'?and?b.segment_type='TABLE'?order?by?s.hash_value,s.address,s.piece /

?

??? 還有一個原因可能會引起cache buffers chains latch,就是熱點數據塊問題。這是指多個session重復訪問一個或多個被同一個child cache buffers chains latch保護的內存數據塊。這主要是應用程序的問題。大多數情況下,單純增加child cache buffers chains latches的個數對提高性能沒有作用。這是因為內存數據塊是根據數據塊地址以及hash chain的個數來進行hash運算從而得到具體的hash chain的,而不是根據child cache buffers chains latches的個數。如果數據塊的地址以及hash chain的個數保持一致,那么熱點塊仍然很有可能會被hash到同一個child cache buffers chains latch上。可以通過v$session_wait的p1raw字段來判斷latch free等待事件是否是由于出現了熱點塊。如果p1raw保持一致,那么說明session在等待同一個latch地址,系統存在熱點塊。當然也可以通過x$bh的tch來判斷是否出現了熱點塊,該值越高則數據塊越熱。

?SQL>?select?sid, p1raw, p2, p3, seconds_in_wait, wait_time, state ?from?v$session_wait ?where?event =?'latch free'??order?by?p2, p1raw; ?SID P1RAW P2 P3 SECONDS_IN_WAIT WAIT_TIME STATE ---- -------- --- --- --------------- ---------- ------------------ ?38?6666535C 13?1?1?2?WAITED KNOWN TIME ?42?6666535C 13?1?1?2?WAITED KNOWN TIME ?44?6666535C 13?3?1?4?WAITED KNOWN TIME ……………………… ?85?6666535C 13?3?1?12?WAITED KNOWN TIME ?214?6666535C 138?1?1?2?WAITED KNOWN TIME

?

接下來,我們就可以根據p1raw的值去找到所對應的內存數據塊以及對應的表的名稱了。

?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 =?'6666535C';

?

關于處理Latch的問題的一個重要的動態性能視圖請參考我另外一篇博客:Oracle X$BH

?

?

總結

以上是生活随笔為你收集整理的Oracle latch: cache buffers chains的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产精品免费一区二区三区都可以 | 国产精品午夜一区二区 | 不卡中文字幕 | 闫嫩的18sex少妇hd | 国产精品1234 | 欧美日韩国产一区二区 | 精品二区在线 | 久久国产亚洲精品无码 | 久久人| 国产美女视频一区 | 亚洲一区二区网站 | 欧美日韩国产黄色 | 亚洲a视频在线观看 | 久久视频在线观看 | 岳乳丰满一区二区三区 | 最新在线黄色网址 | 日韩欧美在线看 | 中国18videosex极品 | 精品一区二区三区视频 | 男生操女生屁股 | 成人黄色免费在线观看 | 天天插夜夜操 | 日韩亚洲欧美综合 | 久久久久久久久久久久久久久久久久 | 一本大道熟女人妻中文字幕在线 | 日本日皮视频 | 九色91丨porny丨丝袜 | 国产一区二区三区四区hd | 99日韩| 国产999在线| 黄色中文 | 天天干,天天爽 | 日韩午夜精品视频 | a天堂在线资源 | 国产黄视频在线观看 | 天天爱天天做 | 国内自拍青青草 | 亚洲在线色 | 国产私拍| 青青草免费观看 | 91精品国产色综合久久不卡蜜臀 | 色哟哟免费在线观看 | 国产精自产拍久久久久久蜜 | 亚洲第一区在线 | 日批黄色 | 亚洲欧美日韩精品色xxx | 高清欧美精品xxxxx在线看 | 国产乱码一区二区 | 国产成人啪免费观看软件 | 免费的污网站 | 欧美老女人性生活视频 | 草草福利影院 | 青青草视频偷拍 | 欧美极品少妇xxxxⅹ免费视频 | 国产中文字幕精品 | 欧美性综合 | 国产最新在线 | 日韩性生活大片 | 久久久久久综合网 | 国产精品爽爽久久久久久 | 色噜噜狠狠一区二区三区果冻 | 国产成人久久精品流白浆 | 色欲AV无码精品一区二区久久 | 视频在线观看网站免费 | 精品国产一区二区三区久久狼黑人 | 日本a一级片 | 亚洲综合激情另类小说区 | 手机看片在线观看 | 成人午夜精品视频 | 相亲对象是问题学生动漫免费观看 | 毛片专区 | 97精品人妻一区二区三区蜜桃 | av色综合| 欧美成人高清 | 少妇被狂c下部羞羞漫画 | 男女啪啪资源 | 久久免费少妇高潮99精品 | 亚洲精品人人 | www.夜夜爱| 男女黄色又爽大片 | 中文字幕精品在线视频 | 污视频网站免费 | 久久婷五月 | 三级av在线| 99激情视频 | 99久久久国产精品无码免费 | 99国产精品99久久久久久粉嫩 | 高h喷水荡肉少妇爽多p视频 | 毛片av免费看 | 免费a级 | 黄色三级在线观看 | 欧美另类极品videosbest使用方法 | 欧美在线天堂 | 2021天天干 | 免费在线观看网址入口 | 欧美精品黄色 | 香蕉亚洲 | 黄a在线| 日韩1区2区3区 |