基礎知識1——例項記憶體結構
例項記憶體結構
instance由系統全域性區SGA的共享記憶體塊以及大量的後臺程式組成.
SGA必須包含:資料庫緩衝區快取DB buffer,日誌緩衝區Log buffer,共享池shared pool.
SGA可能包含:大池large pool,Java池java pool,流池stream pool.
對這些結構的大小管理,大多可自動完成,DBA也可自行控制,建議使用自動管理.
資料庫緩衝區快取DB Buffer:是oracle執行SQL的區域.更新資料時使用者會話不直接更新磁碟上的資料,包含關鍵資料的資料塊首先複製到資料庫緩衝區快取.更改應用於資料庫緩衝區快取中這些資料塊的副本.此後,塊將在快取中保留一段時間,直至其佔有的緩衝區需要快取另一個塊為止.
查詢資料時,資料也要經過快取.會話計算出哪些塊包含關鍵的行,並將它們複製到資料庫緩衝區快取,此後相關行傳輸到會話的PGA作進一步處理,塊也會在資料庫緩衝區快取中保留一段時間.
為了執行使用者程式提交的select語句,會話的伺服器程式將掃描緩衝區快取包含相關行的資料塊,找到了就會發生一次緩衝區快取命中.如果沒命中,伺服器程式在將結果傳送給使用者程式前,會將包含相關行的資料從資料檔案讀入緩衝區.
如果緩衝區儲存的塊映像與磁碟上的不同,這樣的緩衝區叫"髒緩衝區",當塊第一次複製到其中時,叫"乾淨緩衝區":此時緩衝區塊映像與磁碟上的塊映像是相同的.當塊更新時,緩衝區將變髒.最終,髒緩衝區必須寫回到資料檔案,此時緩衝區又變得乾淨了. 即使寫入磁碟後,此塊也保留在記憶體中一段時間,不會被另一個塊重寫.
資料庫緩衝區快取大腳對效能影響很大.快取應足夠大,便於快取所有頻繁訪問的塊,但又不能過大,快取那些極少使用的塊.
資料庫緩衝區快取在例項啟動時分配,可動態調整其大小,也可進行自動管理.
日誌緩衝區Log Buffer:小型的,用於短期儲存將寫入到磁碟上的重做日誌變更向量的臨時區域.會話伺服器程式不將重做記錄直接寫入重做日誌檔案,會話將重做記錄寫入記憶體中的日誌緩衝區,隨後 日誌緩衝區寫出到重做日誌檔案,會話發出commit語句時,會實時執行日誌緩衝區寫操作,寫操作由日誌寫入器後臺程式(LGWR)完成.
日誌緩衝區比較小,一般為幾MB,預設值由oracle伺服器確定,並取決於伺服器節點中的CPU數量.不能設定小於預設值的日誌緩衝區,如果這麼做,日誌緩衝區一定會被設定為預設大小.
日誌緩衝區在啟動例項時分配,如果不重啟例項,就不能在隨後調整其大小,它是一個迴圈緩衝區.大小固定不變,啟動例項時被設定為預設值,無法對其進行自動管理.
oracle體系結構中,將日誌緩衝區轉儲到磁碟是基本瓶頸之一,DML的速度不能超過LGWR將變更向量轉儲到聯機重做日誌檔案的速度.
共享池:最複雜的SGA結構,簡單介紹4個共享池元件:
- 庫快取(library cache)
- 資料字典快取(dictionary cache)
- PL/SQL區
- SQL查詢和PL/SQL函式結果快取
共享池中的所有結構是自動管理的,在共享池的總體大小範圍內,各個結構的大小針對例項的活動模式而異. 共享池本身大小可動態重調.
庫快取:是記憶體區域,按其已分析的格式儲存最近執行的程式碼,通過將程式碼快取在共享池,可以在不重新分析的情況下重用,極大地提高效能.
資料字典快取:有時叫"行快取",它儲存最近使用的物件定義:表,索引,使用者和其它後設資料定義的描述.通過將此類定義放在SGA的記憶體中,以便使所有會話可以直接訪問它們,而不用從磁碟上的資料字典中重複讀取,提高效能.
PL/SQL區:儲存的PL/SQL物件是過程,函式,打包的過程,打包的函式,物件型別定義和觸發器.它們全都像原始碼那樣儲存在資料字典中.當會話呼叫儲存的PL/SQL物件時,它必須從資料字典讀取.為了避免重複讀取,將物件快取到共享池的PL/SQL區.
SQL查詢和PL/SQL函式結果快取:結果快取是11g新功能,在很多應用程式中,同一個查詢將由同一個會話或多個不同會話執行多次.通過建立結果快取,oracle可將此類查詢的結果儲存在記憶體中,在下次發出查詢時,伺服器可以檢索快取的結果,而不用執行該查詢.
共享池大小設定對效能影響很大,足夠大,也不能過大.共享池中的記憶體按照LRU(最近最少使用)演算法來分配. 在例項啟動時分配,大小是動態的,可進行自動管理.
大池:可選區域,如果建立大池,那些在不建立大池時使用共享池記憶體的不同程式將自動使用大池.大池的一個主要用途是供共享的伺服器程式使用. 設定大池的大小與效能無關,某個程式需要大記憶體池,而記憶體不夠用,則此程式將失敗並報錯,大池的大小可動態調整,而且可以自動管理.
Java池:應用程式需要在資料庫中執行Java儲存過程時才需要Java池.注意!Java程式碼不在Java池中快取,而在共享池中快取.Java池大小是動態的,可自動管理.
流池:供oracle流使用,從重做日誌提取變更向量,使用這些重新構造執行的語句,在遠端資料庫執行.大小動態的,可自動管理.
顯示SGA的當前,最大和最小容量:
select component,current_size,min_size,max_size from v$sga_dynamic_components
確定已為PGA分配了多少記憶體:
select name,value from v$pgastat
where name in ('maximum PGA allocated','total PGA allocated')
instance由系統全域性區SGA的共享記憶體塊以及大量的後臺程式組成.
SGA必須包含:資料庫緩衝區快取DB buffer,日誌緩衝區Log buffer,共享池shared pool.
SGA可能包含:大池large pool,Java池java pool,流池stream pool.
對這些結構的大小管理,大多可自動完成,DBA也可自行控制,建議使用自動管理.
資料庫緩衝區快取DB Buffer:是oracle執行SQL的區域.更新資料時使用者會話不直接更新磁碟上的資料,包含關鍵資料的資料塊首先複製到資料庫緩衝區快取.更改應用於資料庫緩衝區快取中這些資料塊的副本.此後,塊將在快取中保留一段時間,直至其佔有的緩衝區需要快取另一個塊為止.
查詢資料時,資料也要經過快取.會話計算出哪些塊包含關鍵的行,並將它們複製到資料庫緩衝區快取,此後相關行傳輸到會話的PGA作進一步處理,塊也會在資料庫緩衝區快取中保留一段時間.
為了執行使用者程式提交的select語句,會話的伺服器程式將掃描緩衝區快取包含相關行的資料塊,找到了就會發生一次緩衝區快取命中.如果沒命中,伺服器程式在將結果傳送給使用者程式前,會將包含相關行的資料從資料檔案讀入緩衝區.
如果緩衝區儲存的塊映像與磁碟上的不同,這樣的緩衝區叫"髒緩衝區",當塊第一次複製到其中時,叫"乾淨緩衝區":此時緩衝區塊映像與磁碟上的塊映像是相同的.當塊更新時,緩衝區將變髒.最終,髒緩衝區必須寫回到資料檔案,此時緩衝區又變得乾淨了. 即使寫入磁碟後,此塊也保留在記憶體中一段時間,不會被另一個塊重寫.
資料庫緩衝區快取大腳對效能影響很大.快取應足夠大,便於快取所有頻繁訪問的塊,但又不能過大,快取那些極少使用的塊.
資料庫緩衝區快取在例項啟動時分配,可動態調整其大小,也可進行自動管理.
日誌緩衝區Log Buffer:小型的,用於短期儲存將寫入到磁碟上的重做日誌變更向量的臨時區域.會話伺服器程式不將重做記錄直接寫入重做日誌檔案,會話將重做記錄寫入記憶體中的日誌緩衝區,隨後 日誌緩衝區寫出到重做日誌檔案,會話發出commit語句時,會實時執行日誌緩衝區寫操作,寫操作由日誌寫入器後臺程式(LGWR)完成.
日誌緩衝區比較小,一般為幾MB,預設值由oracle伺服器確定,並取決於伺服器節點中的CPU數量.不能設定小於預設值的日誌緩衝區,如果這麼做,日誌緩衝區一定會被設定為預設大小.
日誌緩衝區在啟動例項時分配,如果不重啟例項,就不能在隨後調整其大小,它是一個迴圈緩衝區.大小固定不變,啟動例項時被設定為預設值,無法對其進行自動管理.
oracle體系結構中,將日誌緩衝區轉儲到磁碟是基本瓶頸之一,DML的速度不能超過LGWR將變更向量轉儲到聯機重做日誌檔案的速度.
共享池:最複雜的SGA結構,簡單介紹4個共享池元件:
- 庫快取(library cache)
- 資料字典快取(dictionary cache)
- PL/SQL區
- SQL查詢和PL/SQL函式結果快取
共享池中的所有結構是自動管理的,在共享池的總體大小範圍內,各個結構的大小針對例項的活動模式而異. 共享池本身大小可動態重調.
庫快取:是記憶體區域,按其已分析的格式儲存最近執行的程式碼,通過將程式碼快取在共享池,可以在不重新分析的情況下重用,極大地提高效能.
資料字典快取:有時叫"行快取",它儲存最近使用的物件定義:表,索引,使用者和其它後設資料定義的描述.通過將此類定義放在SGA的記憶體中,以便使所有會話可以直接訪問它們,而不用從磁碟上的資料字典中重複讀取,提高效能.
PL/SQL區:儲存的PL/SQL物件是過程,函式,打包的過程,打包的函式,物件型別定義和觸發器.它們全都像原始碼那樣儲存在資料字典中.當會話呼叫儲存的PL/SQL物件時,它必須從資料字典讀取.為了避免重複讀取,將物件快取到共享池的PL/SQL區.
SQL查詢和PL/SQL函式結果快取:結果快取是11g新功能,在很多應用程式中,同一個查詢將由同一個會話或多個不同會話執行多次.通過建立結果快取,oracle可將此類查詢的結果儲存在記憶體中,在下次發出查詢時,伺服器可以檢索快取的結果,而不用執行該查詢.
共享池大小設定對效能影響很大,足夠大,也不能過大.共享池中的記憶體按照LRU(最近最少使用)演算法來分配. 在例項啟動時分配,大小是動態的,可進行自動管理.
大池:可選區域,如果建立大池,那些在不建立大池時使用共享池記憶體的不同程式將自動使用大池.大池的一個主要用途是供共享的伺服器程式使用. 設定大池的大小與效能無關,某個程式需要大記憶體池,而記憶體不夠用,則此程式將失敗並報錯,大池的大小可動態調整,而且可以自動管理.
Java池:應用程式需要在資料庫中執行Java儲存過程時才需要Java池.注意!Java程式碼不在Java池中快取,而在共享池中快取.Java池大小是動態的,可自動管理.
流池:供oracle流使用,從重做日誌提取變更向量,使用這些重新構造執行的語句,在遠端資料庫執行.大小動態的,可自動管理.
顯示SGA的當前,最大和最小容量:
select component,current_size,min_size,max_size from v$sga_dynamic_components
確定已為PGA分配了多少記憶體:
select name,value from v$pgastat
where name in ('maximum PGA allocated','total PGA allocated')
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25025926/viewspace-1067523/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 基礎知識1——例項程式結構
- Java基礎知識_記憶體Java記憶體
- node記憶體基礎知識記憶體
- oracle 例項記憶體結構Oracle記憶體
- Oracle例項的程式結構和記憶體結構Oracle記憶體
- 【基礎篇記憶體結構】oracle10g記憶體結構(一)記憶體Oracle
- ORACLE例項的程式結構和記憶體結構(轉)Oracle記憶體
- 達夢資料庫基礎知識(三)達夢資料庫記憶體結構資料庫記憶體
- Redis基礎知識(學習筆記1--五種基礎資料結構)Redis筆記資料結構
- Python入門基礎知識例項,Python
- 2 Day DBA-管理Oracle例項-關於例項記憶體結構Oracle記憶體
- Java基礎知識總結-1Java
- JS基礎知識總結(1)JS
- 資料結構基礎知識資料結構
- DDR記憶體基礎知識和頻寬測試記憶體
- 用例基礎知識
- 1、基礎知識
- C++基礎知識筆記(1)筆記
- 基礎知識1——資料物理,邏輯儲存結構
- Java&Android 基礎知識梳理(3) 記憶體區域JavaAndroid記憶體
- 圖片基礎知識梳理(2) Bitmap 佔用記憶體分析記憶體
- java基礎語法知識小結(1)Java
- 公共基礎知識-資料結構-樹資料結構
- PHP 基礎知識-1PHP
- DDD基礎知識1
- 機器學習基礎知識1機器學習
- 1.基礎知識
- DS #1 基礎知識
- python爬蟲之Beautiful Soup基礎知識+例項Python爬蟲
- 無鎖資料結構(基礎篇):記憶體柵障資料結構記憶體
- SAP SD基礎知識之組織結構
- Java基礎知識——類的深層結構Java
- GO 學習筆記 《1. 基礎知識》Go筆記
- React學習手記1--基礎知識React
- PHP學習筆記(1)–基礎知識篇PHP筆記
- C++基礎知識學習筆記(1)C++筆記
- 2 Day DBA-管理Oracle例項-關於例項記憶體結構-程式全域性區(PGA)Oracle記憶體
- Python基礎知識1Python