Oracle中如何解決LATCH:CACHE BUFFERS LRU CHAIN

簡單來講,Oracle為了高效管理BUFFER CACHE主要使用以下2種LRU列:
?LRU列,又叫替換列(replacement list),其中又分為主列和輔助列。
主列:已使用的緩沖區列,分為HOT和COLD區域。HOT區域中存放著使用頻率高的數據塊,COLD區域存放使用頻率較低的數據塊。Oracle用TCH表示該區域內數據塊的使用頻繁程度。
輔助列:空閑緩沖區列。數據庫重啟之后,所有的緩沖區頭開始時都是在輔助列中管理的。或者在LRU-W上的臟數據寫進制數據文件之后,Oracle會將相關的緩沖區頭直接掛載至輔助列上。輔助列上的緩沖區頭表示可以直接被其他數據塊使用。
?LRU-W列,又叫寫入列(LRU-Write list),臟數據列。臟緩沖區頭由DBWR進程從LRU列移動至LRU-W列中(有時DBWR進程因為太忙而不能執行這種移動)。尋找空閑緩沖區的服務器進程在LRU列表上掃描時,如果遇到了臟緩沖區頭,就將臟緩沖頭從LRU列表中移動至LRU-W列表中。LRU-W列中又分為主列和輔助列。
主列:已修改的緩沖區列。
輔助列:當前正通過DBWR進程寫入的緩沖區列。
提示 除了LRU列和LRUW列,還有LRU-XO列、LRU-XR列、LRU-P列。在性能優化時,最容易引起性能問題的是LRU列和LRU-W列,所以一般情況下并不需要關心LRU-XO列、LRU-XR列、LRU-P列,所以本章也不打算深入講解這3列。
LRU列和LRW-W列總是成對(pair)的出現,稱之為WORKING SET。為了提高性能,Oracle使用多個WORKING SET,由CACHE BUFFERS LRU CHAIN LATCH保護。基于性能上的考慮,服務器進程在檢索空閑緩沖區時,首先會檢索LRU列的輔助列,當輔助列沒有剩余緩沖區時,才會檢索LRU主列中的COLD區域。
另外需要指出的是LRU列中HOT和COLD區域只是針對nK BUFFER POOL的,KEEP POOL和RECYCLE POOL中沒有HOT和COLD區域之分。KEEP POOL比較適合存放使用頻繁讀取的小表,RECYCLE POOL比較適合存放使用頻率較低的大表。數據塊在nK BUFFER POOL中的存放位置受以下隱含參數的影響:
?隱含參數_db_percent_hot_default,默認值為50。表示SINGLE BLOCK I/O(如唯一鍵索引讀)讀取的數據塊進入BUFFER CACHE之后,會將其放置在nK BUFFER POOL中LRU列的中間,即“熱”端的尾部。MULTI BLOCK I/O(如對大表進行全表掃描)時,服務器進程會將大量的數據塊讀至BUFFER CACHE中,為了減輕對LRU列表中數據塊(熱塊)的沖擊,Oracle會將大表全表掃描的數據塊存放至LRU列表的尾部,存放在LRU列表尾部的數據塊可以盡快地被交換出BUFFER CACHE。
?隱含參數_db_percent_hot_keep和_db_percent_hot_recycle,默認值為0。表示數據塊進入到KEEP POOL和RECYCLE POOL時放在LRU列的尾端。
前面提到,Oracle為了提高性能會使用多個WORKING SET,并由CACHE BUFFERS LRU CHAIN LATCH保護。每一個CACHE BUFFERS LRU CHAIN LATCH對應一個WORKING SET,接下來將相對深入地探討一下CACHE BUFFERS LRU CHAIN LATCH。
可以通過以下方法獲取當前系統中CACHE BUFFERS LRU CHAIN LATCH的數量:
?查詢隱含參數_db_block_lru_latches。
?通過查詢V$LATCH_CHILDREN獲得。如下所示:

SQL> select count(*) from v$latch_children2  where name='cache buffers lru chain';

Oracle默認創建的CACHE BUFFERS LRU CHAIN LATCH的數量跟CPU的個數和DB_WRITER_PROCESSES參數有關。若DBWR數小于4,則創建4CPU_COUNT個CACHE BUFFERS LRU CHAIN LATCH,若DBWR數大于4,則創建DB_WRITER_PROCESSESCPU_COUNT個CACHE BUFFERS LRU CHAIN LATCH。從以上算法可以看出,CACHE BUFFERS LRU CHAIN LATCH的數量總是大于DBWR數量,即WORKING SET的數量總是大于DBWR的數量。不同的WORKING SET可以出現在不同類型的BUFFER POOL中,每個BUFFER POOL獨立使用自己的CACHE BUFFERS LRU CHAIN LATCH
由于一個數據庫實例可以配置8種不同類型的BUFFER POOL(DEFAULT、2KB、4KB、8KB、16KB、32KB、KEEP、RECYCLE BUFFER POOL),因此CACHE BUFFERS LRU CHAIN LATCH的數量至少為8個。可以通過以下查詢獲得各個BUFFER POOL中CACHE BUFFERS LAU CHAIN LATCH的使用情況:
SQL> select d.blk_size,c.child#,p.bp_name,c.gets,c.sleeps
2 from x k c b w d s d , v kcbwds d, v kcbwdsd,vlatch_children c, x$kcbwbpd p
3 where d.set_latch=c.addr
4 and d.set_id between p.bp_lo_sid and p.bp_hi_sid
5 order by c.child#;

BLK_SIZE CHILD# BP_NAME GETS SLEEPS


  8192          1 KEEP                        459          08192          2 KEEP                        459          08192          3 RECYCLE                     459          08192          4 RECYCLE                     459          08192          5 DEFAULT                  410618          28192          6 DEFAULT                  402282          02048          7 DEFAULT                     459          02048          8 DEFAULT                     459          04096          9 DEFAULT                     459          04096         10 DEFAULT                     459          08192         11 DEFAULT                     459          08192         12 DEFAULT                     459          016384         13 DEFAULT                     459          016384         14 DEFAULT                     459          032768         15 DEFAULT                     459          032768         16 DEFAULT                     459          0

16 rows selected.
從上面的查詢結果可以看出,目前系統存在16個CACHE BUFFERS LRU CHAIN LATCH,但只使用了2個。以下2種情況下必須要獲得CACHE BUFFERS LRU CHAIN LATCH:
?數據塊讀進BUFFER CACHE之前需要獲得CACHE BUFFERS LRU CHAIN LATCH查找空閑緩沖區。
?DBWR進程為了獲得臟數據塊列表,掃描LRU-W列之前需要獲得CACHE BUFFERS LRU CHAIN LATCH。此外將空閑緩沖區移動至LRU輔助列,也需要獲得CACHE BUFFERS LRU CHAIN LATCH。
當許多進程同時檢索LRU列或者LRU-W列時,則容易出現LATCH: CACHE BUFFERS LRU CHAIN等待事件。一般來講,CACHE BUFFERS LRU CHAIN LATCH爭用最主要的原因是低效的SQL導致前臺進程過多地請求空閑緩沖區引起的。與發生LATCH:CACHE BUFFERS CHAINS等待事件類似,不能簡單地通過調整隱含參數_db_block_lru_latches來解決LATCH: CACHE BUFFERS LRU CHAIN等待事件。
在這里,讀者需要仔細體會CACHE BUFFERS CHAINS LATCH和CACHE BUFFERS LRU CHAIN LATCH之間的區別:
?多個會話并發訪問相同的表或者索引時,則發生CACHE BUFFERS CHAINS LATCH爭用的概率較高,因為相同表或索引的數據塊多集中于幾條相同的HASH CHAIN中。
?多個會話并發訪問不同的表或者索引時,則發生CACHE BUFFERS LRU CHAIN LATCH爭用的概率較高,因為不同的數據塊都存放在BUFFER CACHE中的概率較低,當發生物理讀時需要更多地掃描LRU列和LRU-W列。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/81750.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/81750.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/81750.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C++:迭代器

迭代器的本質&#xff1a;對象。 迭代器與指針類似&#xff0c;通過迭代器可以指向容器中的某個元素&#xff0c;還可以對元素進行操作。 迭代器統一規范了遍歷方式。不同的數據結構可以用統一的方式去遍歷。 接下來是一個自定義迭代器的代碼示例。 #include<iostream&g…

(4)Java虛擬線程與傳統線程對比

虛擬線程與傳統線程對比 &#x1f504; &#x1f4cb; 核心問題 Project Loom的虛擬線程與傳統線程在資源消耗上有何區別&#xff1f;如何設計一個支持百萬級并發的服務&#xff1f; &#x1f4ca; 資源消耗比較 &#x1f418; 傳統線程 &#x1f4cf; 每線程約1MB棧空間&am…

Java 單元測試框架比較:JUnit、TestNG 哪個更適合你?

Java 單元測試框架比較&#xff1a;JUnit、TestNG 哪個更適合你&#xff1f; 在 Java 開發領域&#xff0c;單元測試是保證代碼質量的重要環節。而選擇一個合適的單元測試框架&#xff0c;對于提升測試效率和代碼可靠性至關重要。本文將深入比較 JUnit 和 TestNG 這兩個主流的…

從零開始的抽獎系統創作(2)

我們接著進行抽獎系統的完善。 前面我們完成了 1.結構初始化&#xff08;統一結果返回之類的&#xff0c;還有包的分類&#xff09; 2.加密&#xff08;基于Hutool進行的對稱與非對稱加密&#xff09; 3.用戶注冊 接下來我們先完善一下結構&#xff08;統一異常處理&#…

【vs2022的C#窗體項目】打開運行+sql Server改為mysql數據庫+發布

1. vs2022打開運行原sql Server的C#窗體項目更改為mysql數據庫 1.1. vs2022安裝基礎模塊即可 安裝1??vs核心編輯器2??.net桌面開發必選&#xff0c;可選均不安裝&#xff01;&#xff01;&#xff01; 為了成功連接mysql數據庫&#xff0c;需要安裝組件NuGet包管理器 安…

AI 編程 “幻覺” 風險頻發?飛算 JavaAI 硬核技術筑牢安全防線

AI 技術已深度融入編程領域&#xff0c;為開發者帶來前所未有的便利與效率提升。然而&#xff0c;AI 編程 “幻覺” 問題如影隨形&#xff0c;頻頻引發困擾&#xff0c;成為阻礙行業穩健發展的潛在風險。飛算 JavaAI 憑借一系列硬核技術&#xff0c;強勢出擊&#xff0c;為攻克…

數據庫----軟考中級軟件設計師(自用學習筆記)

目錄 1、E-R圖 2、結構數據模型 3、數據庫的三級模式結構 4、關系代數 5、查詢 6、SQL控制語句 7、視圖?編輯 8、索引 9、關系模式 10、函數依賴 11、通過閉包求候選碼 12、范式 13、無損連接和保持函數依賴 14、數據庫設計 15、數據庫的控制功能 16、數據庫…

【Qt】Qt常見控件的相關知識點

1.close退出槽函數 2.設置快捷鍵&#xff0c;QMenu 。 適用&字母就能設置快捷鍵&#xff0c;運行qt程序&#xff0c;最后就可以按Alt對應的字母進行快捷操作。 3.QMenuBar內存泄露問題 如果ui已經自動生成了menubar&#xff0c;我們再次生成一個新的菜單欄&#xff0c;而…

httpx[http2] 和 httpx 的核心區別及使用場景如下

httpx[http2] 和 httpx 的核心區別在于 HTTP/2 協議支持&#xff0c;具體差異及使用場景如下&#xff1a; 1. 功能區別 命令/安裝方式協議支持額外依賴適用場景pip install httpx僅 HTTP/1.1無通用請求&#xff0c;輕量依賴pip install httpx[http2]支持 HTTP/2需安裝 h2>3…

Spring Boot 中 MyBatis 與 Spring Data JPA 的對比介紹

一、核心概念 MyBatis 定義&#xff1a;基于 SQL 的持久層框架&#xff0c;提供靈活的 SQL 映射和自定義查詢能力。 特點&#xff1a; 開發者手動編寫 SQL&#xff08;XML 或注解&#xff09;。 支持動態 SQL、復雜查詢優化。 輕量級&#xff0c;對數據庫控制力強。 Spri…

k8s1.27集群部署mysql8.0雙主雙從

環境介紹&#xff1a; #節點分配 159m--->兩個master&#xff0c;生產環境建議&#xff0c;一個master一個節點。 160n-->slave-0 161n-->slaves-0 #存儲卷 pv-->放在節點上&#xff0c;沒用nfs/云存儲。hostpath方式存儲。pv的資源分配1G&#xff0c;較小&#…

vivado fpga程序固化

一般下載到fpga上的程序在掉電之后就會丟失&#xff0c;如果想要掉電之后程序不丟失&#xff0c;就需要將比特流文件固化到板載的flash上。 以下以我的7a100t開發板為例&#xff0c;介紹程序固化的流程 點擊OK就可以下載了。

RabbitMQ Topic RPC

Topics(通配符模式) Topics 和Routing模式的區別是: topics 模式使?的交換機類型為topic(Routing模式使?的交換機類型為direct)topic 類型的交換機在匹配規則上進?了擴展, Binding Key?持通配符匹配(direct類型的交換機路 由規則是BindingKey和RoutingKey完全匹配) 在top…

服務器死機了需要檢查哪些問題

在這個數字化的時代&#xff0c;服務器就像是我們信息世界的“大管家”&#xff0c;可要是它突然死機了&#xff0c;那可真是讓人頭疼。今天咱們就來聊聊&#xff0c;服務器死機了&#xff0c;到底需要檢查哪些問題。 一、硬件問題 電源供應&#xff1a;檢查電源是否穩定&…

【MySQL成神之路】運算符總結

MySQL運算符總結 MySQL提供了豐富的運算符&#xff0c;用于在SQL語句中進行各種計算和比較操作。這些運算符可以分為算術運算符、比較運算符、邏輯運算符、位運算符等幾大類。合理使用這些運算符可以構建復雜的查詢條件和計算表達式。 一、算術運算符 MySQL支持基本的算術運…

自用Vscode 配置c++ debug環境

前言 使用vscode配置c debug環境的好處 1、可以借助vscode方便輕量的擴展和功能 2、避免了傳統使用gdb 復雜按鍵以及不夠直觀的可視化 3、方便一次運行&#xff0c;斷點處查看變量&#xff0c;降低找bug難度 4、某大公司項目采用類似配置&#xff0c;經過實踐檢驗 配置c運行環…

創建一個使用 GPT-4o 和 SERP 數據的 RAG 聊天機器人

亮數據-網絡IP代理及全網數據一站式服務商屢獲殊榮的代理網絡、強大的數據挖掘工具和現成可用的數據集。亮數據&#xff1a;網絡數據平臺領航者https://www.bright.cn/?promogithub15?utm_sourceorganic-social-cn&utm_campaigncsdn 本指南將解釋如何使用 Python、GPT-4…

吳恩達 Deep Learning(1-36)ppt逐行理解

課程地址&#xff1a;(超爽中英!) 2024公認最好的【吳恩達深度學習】教程&#xff01;附課件代碼 Professionalization of Deep Learning_嗶哩嗶哩_bilibili 1.目錄 2.什么是神經網絡 3.用神經網絡進行監督學習 4.為什么深度學習會興起 7.二分分類 適用于二元分類問題的函數&…

三維點云的處理

1 點云原理 https://zh.wikipedia.org/wiki/%E9%BB%9E%E9%9B%B2 點云&#xff08;英語&#xff1a;point cloud&#xff09;是空間中點的數據集&#xff0c;可以表示三維形狀或對象&#xff0c;通常由三維掃描儀獲取。點云中每個點的位置都由一組笛卡爾坐標(X,Y,Z)描述[1]&…

鴻蒙HarmonyOS多設備流轉:分布式的智能協同技術介紹

隨著物聯網和智能設備的普及&#xff0c;多設備間的無縫協作變得越來越重要。鴻蒙&#xff08;HarmonyOS&#xff09;作為華為推出的新一代操作系統&#xff0c;其分布式技術為實現多設備流轉提供了強大的支持。本文將詳細介紹鴻蒙多設備流轉的技術原理、實現方式和應用場景。 …