更新時間:2021-03-11 17:53:36 來源:動力節點 瀏覽1534次
SGA系統全局區的英文簡稱,SGA(System Global Area)是Oracle Instance的基本組成部分,在實例啟動時分配。Oracle數據庫中的SGA是一組包含一個Oracle實例的數據和控制信息的共享內存結構。主要是用于存儲數據庫信息的內存區,該信息為數據庫進程所共享(PGA不能共享的)。Oracle SGA組件包含Oracle服務器的數據和控制信息,它是在Oracle服務器所駐留的計算機的實際內存中得以分配,如果實際內存不夠再往虛擬內存中寫。
SGA主要由數據高速緩沖區(Database Buffer Cache)、共享池(Shared Pool)、重做日志緩沖區(Redo Log Buffer)、大型池(Large Pool)、Java池(Java Pool)、流池(Streams Pool)和其他結構(如固定SGA、鎖管理等)組成,下面我們大致一一介紹一下。
1、數據庫高速緩沖(the data buffer cache)
在數據高速緩沖區中存放著Oracle系統使用過的數據塊(即用戶的高速緩沖區),當把數據寫入數據庫時,它以數據塊為單位進行讀寫,當數據高速緩沖區填滿時,則系統自動去掉一些不常被用戶訪問的數據。如果用戶要查的數據不在數據高速緩沖區時,Oracle自動從磁盤中去讀取。數據高速緩沖區包括三個類型的區:
1) 臟數據區(Dirty Buffers):包含有已經改變過并需要寫回數據文件的數據塊。
2) 自由區(Free Buffers):沒有包含任何數據并可以再寫入的區,Oracle可以從數據文件讀數據塊該區。
3) 保留區(Pinned Buffers):此區包含有正在處理的或者明確保留用作將來用的區。
2、共享池
1)庫高速緩存:用來接收pga傳遞過來的hashvalue,如果該值存在,做軟分析,否則,做硬分析,定義語句是全標掃描還是索引掃描。
2)數據字典高速緩存:提供訪問的對象是表還是索引還是同義詞,表空間、數據文件等,進行遞歸調用。
3)服務器進程用來讀取數據文件到數據高速緩存區中,然后進行的讀取。
3、重做日志緩沖區(Redo Log Buffer)
與塊的更改有關,其大小需要手工設置。
4、大型池(Large Pool)
大池是一個可選區域。如果創建了大池,那各種進程都會自動使用大池。否則就只能使用共享池中的內存。之所以稱之為大池,是因為它用于大塊內存的分配,共享池不會處理這么大的內存塊。
大池專門用于以下情況:
1)共享服務器連接,用于在SGA中分配UGA區,因為一個用戶斷開之后,UGA就可以立即釋放;
2)語句的并行執行,允許分配進程間的消息緩沖區,這些緩沖區用于協調并行查詢服務器。一旦發送了緩沖消息就可以立即釋放;
3)備份,在某些情況下用于RMAN磁盤I/O 緩沖區。因為寫入磁盤之后,這些緩存可以立即釋放;
5、Java池(Java Pool)
是為滿足在ORACLE中內嵌JAVA存儲過程或其他JAVA程序(例如CORBA中間件)運行時而需要的內存,如果不用JAVA等程序,就無須設置,使其值為0就可以了。
6、流池(Streams Pool)
9iR2以上增加了“流”技術,10g以上在SGA中增加了流池。流是用來共享和復制數據的工具。
7、固定SGA(Fixed SGA)
可以把這個區想成是 SGA中的“自啟”區,Oracle在內部要使用這個區來找到SGA的其他區。換一句話,就是在這個內存里面存有其他區的地址,我們可以通過訪問這個區來查找到其他區的位置。
總的來說,可以把Oracle SGA組件看成是由這7個部分組成,它們之前相輔相成,互相協作,共同組成了Oracle中的Oracle實例的數據和控制信息的共享內存結構。在本站的Oracle教程中,我們會深入介紹這些組件的各個作用和屬性,想學習的小伙伴千萬不要錯過這精彩的課程。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習