Oracle體系結構之-記憶體結構
系統全域性區的資料被多個使用者共享。當資料庫例項啟動時,系統全域性區記憶體被自動分配。SGA按作用的不同,又分為:資料緩衝區、日誌緩衝區、共享池。
1. 資料緩衝區
資料緩衝區用於儲存從磁碟資料檔案中讀入的資料,供所有使用者共享。修改、插入的資料儲存在資料緩衝區中,修改完成或DBWR程式執行時,資料被寫入資料檔案。對於緩衝區中已經被修改但尚未寫入檔案的資料,我們稱之為“髒資料”。Oracle採用LRU(最近最少用)演算法來管理資料緩衝區中的資料。
在9i之前,資料緩衝區的大小是由DB_BLOCK_BUFFER確定,之後的版本中,是由引數DB_CACHE_SIZE及DB_nK_CACHE_SIZE確定。
緩衝區的設定對效能影響是很突出的。設一個查詢要讀取的資料塊數為A,能夠從緩衝區讀取到的資料塊數為C,需要從磁碟讀取的資料塊數為D,那麼A+C+D稱為物理讀,則C/A稱為資料緩衝區的命中率。
補充:資料快取區命中率計算公式
======================================================================SQL> select 1 - ((physical.value - direct.value - lobs.value) / logical.value) "Buffer Cache Hit Ratio"
from v$sysstat physical,v$sysstat direct,v$sysstat lobs,v$sysstat logical
where physical.name = 'physical reads'
and direct.name='physical reads direct'
and lobs.name='physical reads direct (lob)'
and logical.name='session logical reads';
======================================================================
一般要求命中率在90%以上,如果命中率太低,就應適當調整資料緩衝區的大小。
2. 日誌緩衝區日誌緩衝區用於緩衝事務日誌,在適當的時候再由LGWR程式寫入日誌檔案。日誌緩衝區的大小由引數LOG_BUGGER設定。
補充:日誌緩衝區失敗率計算公式======================================================================
SQL> select name,gets,misses,immediate_gets,immediate_misses,
Decode(gets,0,0,misses/gets*100) ratio1,
Decode(immediate_gets+immediate_misses,0,0,
immediate_misses/(immediate_gets+immediate_misses)*100) ratio2
from v$latch
where name in('redo allocation','redo copy');
======================================================================
其中,GETS、MISSES分別表示成功、失敗等待日誌緩衝區的次數.IMMEDIATE_GETS表示成功立即得到日誌緩衝區的次數.IMMEDIATE_MISSES表示未成功立即得到日誌緩衝區的次數.
等待表示日誌在進入日誌緩衝區時因為日誌緩衝區過小而沒有空閒空間,所以日誌緩衝區的失敗率表示了日誌緩衝區是否足夠大.不夠大時,使用者的日誌寫將產生等待過程.對於日誌快取區的失敗率,應該小於1%.
3. 共享池共享池是對sql,pl/sql程式進行語法分析,編譯,執行的記憶體區域。包括:庫緩衝區(library cache),資料字典緩衝區(data dictinary cache),使用者全域性區(user global area)三個部分。
共享池的大小由引數shared_pool_size設定。
如果共享池設定過小,則執行SQL,PL/SQL 程式所佔用的時間會較長,影響資料庫效能.對於共享池而言,要求某一個實體,如儲存過程等,儘可能駐留內在區域,增大程式執行的效率,減少重新分析與編譯的時間.
補充:資料字典成功/失敗次數統計
======================================================================SQL> select sum(gets) 'dictionary gets', sum(getmisses) 'dictionary cache getmisses' from v$rowcache;
======================================================================其中,GETS表示讀取某一類資料字典時的成功次數.GETMISSES表示讀取某一類資料字典時的失敗次數.
補充:資料字典失敗/命中率計算公式
======================================================================SQL> select parameter,gets,Getmisses,
getmisses/(gets+getmisses)*100 'miss ratio', (1-(sum(getmisses)/(sum(gets)+sum(getmisses)))*100 "Hit ratio" from v$rowcache
where gets+getmisses<>0
group by parameter,gets,getmisses;
======================================================================
補充:庫快取區命中率計算公式:
======================================================================SQL>select sum(pins) "total pins",
sum(reloads) "total reloads",
sum(reloads)/sum(pins)*100 libcahe
from v$librarycache;
======================================================================
快取的失敗率應該在1%以下
二、程式全域性區
程式全域性區(PGA)是包含單個使用者或伺服器資料的控制資訊的記憶體區域。是在使用者程式連線到oracle資料庫並建立一個會話時,由oracle自動分配的。
PGA是非共享區,主要用於在程式設計時儲存變數與陣列。會話結束時,PGA釋放。
三、排序區
排序區用於sql的order by。oracle優先使用排序區進行排序,如果記憶體不夠,oracle自動使用臨時表空間進行排序。
注:本文參考了CSDN網友方友松的技術Blog,作者的Blog地址為:http://blog.csdn.net/truexf/
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7199667/viewspace-1008690/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle OCP(39):Database 記憶體結構OracleDatabase記憶體
- 記憶體結構記憶體
- Postgresql資料庫體系結構-程式和記憶體結構SQL資料庫記憶體
- Oracle - 資料庫的記憶體結構Oracle資料庫記憶體
- JVM記憶體結構JVM記憶體
- PostgreSQL:記憶體結構SQL記憶體
- JVM之記憶體結構詳解JVM記憶體
- 結構體記憶體對齊結構體記憶體
- 3:Oracle體系結構(邏輯結構)Oracle
- Oracle體系結構學習筆記Oracle筆記
- oracle體系結構(轉)Oracle
- Oracle面試寶典-記憶體結構篇Oracle面試記憶體
- MySQL整體架構與記憶體結構MySql架構記憶體
- 【JVM】堆體系結構及其記憶體調優JVM記憶體
- 【Oracle體系結構】 Oracle19C 系統結構介紹Oracle
- 0718_oracle 體系結構Oracle
- 【JVM之記憶體與垃圾回收篇】JVM與Java體系結構JVM記憶體Java
- JVM讀書筆記之java記憶體結構JVM筆記Java記憶體
- 深入理解 JVM 之 JVM 記憶體結構JVM記憶體
- JVM的基本結構和JVM的記憶體結構JVM記憶體
- 理解JVM(一):記憶體結構JVM記憶體
- JVM(七):JVM記憶體結構JVM記憶體
- JVM記憶體結構劃分JVM記憶體
- 2024.04.18每日收穫之聯合體結構體記憶體分配結構體記憶體
- Oracle記憶體結構(四)----如何獲得Oracle各記憶體段的內部資訊(轉)Oracle記憶體
- Oracle OCP(37):Database 體系結構OracleDatabase
- C++ struct結構體記憶體對齊C++Struct結構體記憶體
- c 結構體記憶體對齊詳解結構體記憶體
- JVM學習(一)——記憶體結構JVM記憶體
- JVM及其記憶體結構劃分JVM記憶體
- 【MEMORY】Oracle記憶體結構資源常用檢視及sqlOracle記憶體SQL
- Oracle記憶體結構(一)----SGA的區域資訊(轉)Oracle記憶體
- JVM記憶體結構、Java記憶體模型和Java物件模型JVM記憶體Java模型物件
- 一點一滴探究 JVM 之記憶體結構JVM記憶體
- 深入探究JVM之記憶體結構及字串常量池JVM記憶體字串
- Redis 雜湊結構記憶體模型剖析Redis記憶體模型
- 瀚高資料庫記憶體結構資料庫記憶體
- Oracle記憶體結構(二)----Shared Pool的詳細資訊(轉)Oracle記憶體
- Oracle記憶體結構(三)----Process Memory的詳細資訊(轉)Oracle記憶體