Oracle SHARED POOL的SUB POOL技術

從Oracle 9i開始,SHARED POOL可以分為多個SUB POOL,其數量受以下幾個因素影響:
?系統CPU的數量。默認情況下,在Oracle中每4個CPU分配一個SUB POOL,最多不能超過7個。
?共享池的大小。SUB POOL的最小容量隨著Oracle版本的不同而不同
?隱含參數_kghdsidx_count值。
當數據庫啟動時,Oracle優先根據_kghdsidx_count隱含參數值設置SUBPOOL數量。通過DUMP HEAP可以觀察SUBPOOL的數量,以下為Oracle 9i的4個SUB POOL:

[ora9208@mcdbatest udump]$ grep "sga heap" ora9208_ora_13150.trc
HEAP DUMP heap name="sga heap"  desc=0x5000002c
HEAP DUMP heap name="sga heap(1,0)"  desc=0x5001ec7c
HEAP DUMP heap name="sga heap(2,0)"  desc=0x50023974
HEAP DUMP heap name="sga heap(3,0)"  desc=0x5002866c
HEAP DUMP heap name="sga heap(4,0)"  desc=0x5002d364

從Oracle 10g開始,每個SUB POOL由4個SUB PARTITION組成,如下所示:

[ora11203@mcdbatest trace]$ grep "sga heap" ora11203_ora_13056.trc
HEAP DUMP heap name="sga heap"  desc=0x200010b4
HEAP DUMP heap name="sga heap(1,0)"  desc=0x2002c534
HEAP DUMP heap name="sga heap(1,1)"  desc=0x2002d16c
HEAP DUMP heap name="sga heap(1,2)"  desc=0x2002dda4
HEAP DUMP heap name="sga heap(1,3)"  desc=0x2002e9dc
HEAP DUMP heap name="sga heap(2,0)"  desc=0x20031a5c
HEAP DUMP heap name="sga heap(2,1)"  desc=0x20032694
HEAP DUMP heap name="sga heap(2,2)"  desc=0x200332cc
HEAP DUMP heap name="sga heap(2,3)"  desc=0x20033f04
HEAP DUMP heap name="sga heap(3,0)"  desc=0x20036f84
HEAP DUMP heap name="sga heap(3,1)"  desc=0x20037bbc
HEAP DUMP heap name="sga heap(3,2)"  desc=0x200387f4
HEAP DUMP heap name="sga heap(3,3)"  desc=0x2003942c
HEAP DUMP heap name="sga heap(4,0)"  desc=0x2003c4ac
HEAP DUMP heap name="sga heap(4,1)"  desc=0x2003d0e4
HEAP DUMP heap name="sga heap(4,2)"  desc=0x2003dd1c
HEAP DUMP heap name="sga heap(4,3)"  desc=0x2003e954

SUB PARTITION的出現跟SHARED POOL DURATION的特性有關,其特性由隱含參數_enable_shared_pool_durations決定,默認為TRUE,即啟用SHARED POOL DURATION特性。當_enable_shared_pool_durations被設置為FALSE時,SUB PARTITION在SUB POOL中消失。在Oracle 10g中,如果設置SGA_TARGET為0,或者在Oracle 10.2.0.5之前的版本中把cursor_space_for_time設置為TRUE時,_enable_shared_pool_durations自動被設置為FALSE。
每個SUB POOL擁有獨立的FREE LIST、LRU LIST和SHARED POOL LATCH。從這個角度來講,當系統有足夠的內存和CPU時,將SHARED POOL分為多個SUB POOL,能有效地減少SHARED POOL LATCH的爭用。可以通過以下查詢查看SHARED POOL LATCH的爭用情況:

SQL> select addr,name,gets,misses,spin_gets2  from v$latch_children      3  where name='shared pool';
ADDR             NAME                            GETS  MISSES SPIN_GETS
---------------- -------------------- --------------- ------- ---------
00000000600F5AE0 shared pool                 70074401   26223     22238
00000000600F5B80 shared pool                107519850   45111     37757
00000000600F5C20 shared pool                 58965575   20992     17791
00000000600F5CC0 shared pool                 58675278   19808     16896
00000000600F5D60 shared pool                 62756019   23706     20197
00000000600F5E00 shared pool                 61585261   21257     18019
00000000600F5EA0 shared pool                 84487594   29571     252337 rows selected.

可以通過查詢X$KSMSS([K]ernal [S]torage [M]emory Management [S]GA [S]tatistics (lengths) of SGA objects)內部視圖獲得每個SUBPOOL所分配的內存,如下所示:

SQL> SELECT  'shared pool('||NVL (DECODE (TO_CHAR (ksmdsidx),'0','0-Unused',ksmdsidx),'Total')||'):'subpool,2           SUM (ksmsslen) BYTES, ROUND (SUM (ksmsslen)/1048576,2) mb3  FROM x$ksmss WHERE ksmsslen > 04  GROUP BY ROLLUP (ksmdsidx) ORDER BY subpool ASC5  /SUBPOOL                   BYTES         MB
-------------------- ---------- ----------
shared pool(1):       353587048     337.21
shared pool(2):       335554440     320.01
shared pool(3):       318773800     304.01
shared pool(4):       318773640     304.01
shared pool(5):       318773328     304.01
shared pool(6):       335549952     320.01
shared pool(7):       318773552     304.01
shared pool(Total):  2299785760    2193.258 rows selected.

另外,還可通過查詢X$KSMSS觀察各個子池的剩余內存。可以看到各個子池剩余內存約在25MB~42MB之間,但這些剩余內存可能是零散的碎片,如下所示:

SQL> SELECT   subpool, NAME, SUM (BYTES), ROUND (SUM (BYTES) / 1048576, 2) mb2      FROM (SELECT    'shared pool (' || DECODE (TO_CHAR (ksmdsidx), '0', '0 - Unused', ksmdsidx)3            || '):' subpool, ksmssnam NAME, ksmsslen BYTES4              FROM x$ksmss WHERE ksmsslen > 0 5              AND LOWER (ksmssnam) LIKE LOWER ('%free memory%'))6  GROUP BY subpool, NAME ORDER BY subpool ASC, SUM (BYTES) DESC;SUBPOOL              NAME            SUM(BYTES)         MB
-------------------- --------------- ---------- ----------
shared pool (1):     free memory       36938752      35.23
shared pool (2):     free memory       44230408      42.18
shared pool (3):     free memory       42153816       40.2
shared pool (4):     free memory       43584456      41.57
shared pool (5):     free memory       27036848      25.78
shared pool (6):     free memory       39586080      37.75
shared pool (7):     free memory       37918416      36.167 rows selected.

值得注意的是,如果Oracle進程在某個SUB POOL中請求內存失敗,可能仍然會繼續在同一個SUB POOL中請求,所以過小的SUB POOL容量非常容易導致內存碎片,進而產生ORA-04031錯誤。雖然從Oracle 10g開始,Oracle改進了相關算法,允許進程請求內存時可在不同SUB POOL中切換,提高了請求成功的可能性,但需要說明的是,請求切換不是一個無止境操作,而且請求切換也需要額外的管理成本,降低了內存獲取的效率。
隨著硬件技術的快速發展,再加上Oracle已經意識到過小的SUB POOL容量帶來的問題,因此,從Oracle 10.2.0.3開始,SUB POOL的最小容量變為了512MB。所以我們并不能因為出現LATCH:SHARED POOL爭用而隨意增大_kghdsidx_count隱含參數。相反,在頻繁發生ORA-04031的系統中可能更需要適當減少SUB POOL的個數。過多的SUB POOL可能會額外增加Oracle在各SUB POOL之間的協調成本。通過查詢X$KGHLU([K]ernel [G]eneric memory [H]eap manager State of [L]R[U] of unpinned recreatable chunks)內部視圖可以觀察各SUBPOOL發生ORA-04031的情況:

SQL> column indx heading "indx|indx num"
SQL> column kghlurcr heading "RECURRENT|CHUNKS"
SQL> column kghlutrn heading "TRANSIENT|CHUNKS"
SQL> column kghlufsh heading "FLUSHED|CHUNKS"
SQL> column kghluops heading "PINS AND|RELEASES"
SQL> column kghlunfu heading "ORA-4031|ERRORS"
SQL> column kghlunfs heading "LAST ERROR|SIZE"
SQL> select2  indx,3  kghlurcr,4  kghlutrn,5  kghlufsh,6  kghluops,7  kghlunfu,8  kghlunfs9  from10  sys.x$kghlu11  where12  inst_id = userenv('Instance');indx  RECURRENT  TRANSIENT    FLUSHED   PINS AND   ORA-4031 LAST ERRORindx num     CHUNKS     CHUNKS     CHUNKS   RELEASES     ERRORS       SIZE
---------- ---------- ---------- ---------- ---------- ---------- ----------0      21079      23947  199844842 1726517983        273       41121      32759      34703  181014058 1232596323        282       40802      33038      34934  182120171 1704173952        167       40803      27987      28540  182331413 2102763044        920       41124      37328      40418  201238783 2205809326         74       41605      30853      35079  202960194 2649732105        379       40806      27690      34344  200629415 2009369183         15       41927 rows selected.

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

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

相關文章

Collection集合遍歷的三種方法

1.foreach循環遍歷 格式&#xff1a;for&#xff08;元素的數據類型 變量名&#xff1a;數組或集合&#xff09;{ } 2.使用迭代器遍歷 方法名稱&#xff1a;Iterator<E> iterator&#xff08;&#xff09; 說明&#xff1a;返回集合中的迭代器對象&#xff0c;該迭代…

頭歌之動手學人工智能-Pytorch 之autograd

目錄 第1關&#xff1a;Variable 任務描述 編程要求 測試說明 沒有偉大的愿望&#xff0c;就沒有偉大的天才。——巴爾扎克開始你的任務吧&#xff0c;祝你成功&#xff01; 第2關&#xff1a;Variable 屬性 任務描述 編程要求 測試說明 真正的科學家應當是個幻想家&a…

篇章二 數據結構——前置知識(二)

目錄 1. 包裝類 1.1 包裝類的概念 1.2 基本數據類型和對應的包裝類 1.3 裝箱和拆箱 1.4 自動裝箱和自動拆箱 1.5 練習 —— 面試題 2. 泛型 2.1 如果沒有泛型——會出現什么情況&#xff1f; 2.2 語法 2.3 裸類型 1.沒有寫<> 但是沒有報錯為什么&#xff1f; …

Git典型使用場景相關命令

Git典型使用場景相關命令 1 建立本地倉庫與遠程倉庫的聯系2 作為開發者參與項目的常用命令2-1 一般步驟2-2 **合并與同步主分支改動**2-3 **查看日志和差異**2-4 **提交后想修改或撤銷**2-5 分支管理2-6 清除未被追蹤的文件&#xff08;謹慎使用&#xff09; 3 作為遠程倉庫管理…

redis緩存-更新策略-三大緩存問題

緩存&#xff1a;數據交換的緩沖區&#xff0c;存儲的數據的臨時地方&#xff0c;讀寫性能較高。 步驟&#xff1a; 先從redis里面查詢 緩存命中&#xff1a;直接返回結果緩存未命中 從數據庫里面查詢 沒有數據&#xff1a;返回null有數據&#xff1a;存到redis里面&#xff…

[TriCore] 01.QEMU 虛擬化 TriCore 架構中的寄存器 指令

目錄 1.寄存器宏 - FIELD() 2.寄存器操作 - FIELD_SETTER() & FIELD_GETTER() 3.指令輔助方法 - HELPER() 3.1.輔助宏 3.2.指令示例 3.3.函數調用 4.PSW 寄存器讀寫 - psw_read() & psw_write() 1.寄存器宏 - FIELD() FIELD() 宏定義寄存器 MASK // include/hw…

《軟件工程》第 4 章 - 需求獲取

在軟件工程中&#xff0c;需求獲取是挖掘用戶真實需求的關鍵步驟&#xff0c;它為后續的設計、開發和測試提供堅實基礎。本章將圍繞需求獲取的流程、方法及工具展開&#xff0c;結合實際案例與 Java 代碼&#xff0c;深入講解這一重要環節。 4.1 軟件需求的初始表示 4.1.1 用例…

react diff 算法

diff 算法作為 Virtual DOM 的加速器&#xff0c;其算法的改進優化是 React 整個界面渲染的基礎和性能的保障&#xff0c;同時也是 React 源碼中最神秘的&#xff0c;最不可思議的部分 diff 算法會幫助我們就算出 VirtualDOM 中真正變化的部分&#xff0c;并只針對該部分進行原…

Gin項目腳手架與標配組件

文章目錄 前言設計思想和原則? 技術棧視頻實況教程sponge 內置了豐富的組件(按需使用)幾個標配常用組件主要技術點另一個參考鏈接 前言 軟件和汽車一樣&#xff0c;由多個重要零部件組裝而成。 本文堆積了一些常用部件&#xff0c;還沒來得及好好整理。先放著。 神兵利器雖多…

【Webtrees 手冊】第 10章 - 用戶體驗

Webtrees 手冊/用戶體驗 < Webtrees 手冊 跳轉到導航跳轉到搜索 信息 手冊部分仍在建設中 請耐心等待或隨意貢獻自己的力量:-)。 第 10 章 - 用戶體驗 <- 章節概述 目錄 1多位系譜學家的合作 1.1家庭研究模型1.2“孤膽戰士”模型1.3示范“本地家庭書”1.4模特“俱樂部”…

Linux 進程概念(下)

目錄 前言 4.進程狀態 一.普遍的操作系統層面上宏觀概念&#xff1a; 二.具體的Linux操作系統的狀態&#xff1a; 5.進程優先級&#xff08;了解&#xff09; 6.其他概念 進程切換 前言 本篇是接著上一篇的內容繼續往下了解進程相關的一些概念&#xff01; 4.進程狀態 運…

使用java實現word轉pdf,html以及rtf轉word,pdf,html

word,rtf的轉換有以下方案&#xff0c;想要免費最靠譜的是LibreOffice方案, LibreOffice 是一款 免費、開源、跨平臺 的辦公軟件套件&#xff0c;旨在為用戶提供高效、全面的辦公工具&#xff0c;適用于個人、企業和教育機構。它支持多種操作系統&#xff08;Windows、macOS、…

IP證書的作用與申請全解析:從安全驗證到部署實踐

在網絡安全領域&#xff0c;IP證書&#xff08;IP SSL證書&#xff09;作為傳統域名SSL證書的補充方案&#xff0c;專為公網IP地址提供HTTPS加密與身份驗證服務。本文將從技術原理、應用場景、申請流程及部署要點四個維度&#xff0c;系統解析IP證書的核心價值與操作指南。 一…

GitLab 18.0 正式發布,15.0 將不再受技術支持,須升級【三】

GitLab 是一個全球知名的一體化 DevOps 平臺&#xff0c;很多人都通過私有化部署 GitLab 來進行源代碼托管。極狐GitLab 是 GitLab 在中國的發行版&#xff0c;專門為中國程序員服務。可以一鍵式部署極狐GitLab。 學習極狐GitLab 的相關資料&#xff1a; 極狐GitLab 官網極狐…

超簡單Translation翻譯模型部署

Helsinki-NLP/opus-mt-{en}-{zh}系列翻譯模型可以實現200多種語言翻譯&#xff0c;Helsinki-NLP/opus-mt-en-zh是其中英互譯模型。由于項目需要&#xff0c;在本地進行搭建&#xff0c;并記錄下搭建過程&#xff0c;方便后人。 1. 基本硬件環境 CPU&#xff1a;N年前的 Intel…

Go語言JSON 序列化與反序列化 -《Go語言實戰指南》

JSON&#xff08;JavaScript Object Notation&#xff09;是一種常見的數據交換格式。Go 標準庫提供了 encoding/json 包&#xff0c;用于方便地將結構體與 JSON 之間互轉。 一、序列化&#xff08;Marshal&#xff09; 將 Go 中的數據結構&#xff08;如結構體、map、slice 等…

免費PDF工具-PDF24V9.16.0【win7專用版】

【百度】https://pan.baidu.com/s/1H7kvHudG5JTfxHg-eu2grA?pwd8euh 提取碼: 8euh 【夸克】https://pan.quark.cn/s/92080b2e1f4c 【123】https://www.123912.com/s/0yvtTd-XAHjv https://creator.pdf24.org/listVersions.php

網絡 :序列和反序列化

網絡 &#xff1a;序列和反序列化 &#xff08;一&#xff09;序列和反序列 概念&#xff08;二&#xff09;實例1. 封裝socket 接口2. 制定協議&#xff08;用于實現序列和反序列化&#xff09;3. 計算(實現計算器功能)4. 服務器(將上面所有的類功能調用起來)5. 服務端6.客戶端…

LiveQing 視頻點播流媒體 RTMP 推流服務功能:搭建 RTMP 視頻流媒體服務詳細指南

LiveQing視頻點播流媒體RTMP推流服務功能&#xff1a;搭建RTMP視頻流媒體服務詳細指南 一、流媒體服務搭建二、推流工具準備三、創建鑒權直播間四、獲取推流地址五、配置OBS推流六、推流及播放七、獲取播放地址7.1 頁面查看視頻源地址7.2 接口查詢 八、相關問題解決8.1 大疆無人…

UE5 Niagara 如何讓四元數進行旋轉

Axis Angle中&#xff0c;X,Y,Z分別為旋轉的軸向&#xff0c;W為旋轉的角度&#xff0c;在這里旋轉角度不需要除以2&#xff0c;因為里面已經除了&#xff0c;再將計算好的四元數與要進行旋轉的四元數進行相乘&#xff0c;結果就是按照原來的角度繞著某一軸向旋轉了某一角度