把Oracle內存結構說透

引言html

Oracle Server由兩個實體組成:實例(instance)與數據庫(database)。java

實例(instance)包括:內存結構(SGA、PGA)和用戶進程,實例爲用戶同數據庫交互的媒介。算法

數據庫(database)包括:物理結構(數據文件、日誌文件、控制文件等)和邏輯結構(表空間、段、區、塊、等)sql

Oracle內存結構與oracle性能息息相關,內存結構是CPU與IO橋樑,內存結構對於數據庫來講很是重要。數據庫

1、內存結構概述緩存

內存結構主要有:系統全局區(System Global Area簡稱SGA)和(Process Global Area簡稱PGA)組成。服務器

系統全局區SGA:當啓動實例的時候分配,是一組包含一個Oracle實例的數據和控制信息的共享內存結構。網絡

進程全局區PGA:當Server進程創建時分配,此區域包含單個服務器進程或單個後臺進程的數據和控制信息,與幾個進程共享的SGA 正相反。PGA 是隻被一個進程使用的私有區域。PGA 在建立進程時分配,在終止進程時回收。架構

2、系統全局區SGAoracle

1.SGA由幾個內存結構組成

數據高速緩衝區(Database Buffer Cache)

共享池(Shared Pool)

重作日誌緩衝區(Redo Log Cache)

其餘結構(如鎖管理)

附圖:

SGA

2.SGA可選內存結構

大池

JAVA池

注:Fixed Sized:Oracle的不一樣平臺和不一樣版本可能不同,對於肯定環境是一個固定值,裏面存儲SGA各部分組件信息,引導創建SGA的區域。

Variable Size:包括share_pool_size、java_pool_size、large_pool_size等內存設置和管理數據緩衝區等內存結構的 Hash table、塊頭信息等。1

Datebase Buffers:數據緩衝區,個版本包含的內容不一樣。

Redo Buffers:重作日誌緩衝區的實際大小,和Log_buffer的值稍有不一樣。

SGA的管理:

   △9i:SGA總大小由初始化參數SGA_MAX_SIZE肯定。各個內存組件大小之和不能超過這個參數,在這個大小之下,SGA各個內存組件能夠在不重啓數據庫的狀況下直接修改大小,因此叫作SGA的動態管理。

   △10g:SGA大小既能夠像9i同樣動態管理,也能夠實施SGA的自動管理。只須要設置初始化參數SGA_TARGET,SGA各個內存組件就能夠由數據庫自動設置大小,設置的依據來源於自動收集的統計信息。

   △11g:oracle的內存管理方式能夠根據版本向下兼容,oracle 11g中引入了自動內存管理(Automatic Memory Management),僅用兩個參數完成oracle的內存管理工做,參數說明:MEMORY_TARGET:oracle所能使用的最大內存,該參數能夠動態調整;MEMORY_MAX_TARGET:MEMORY_TARGET參數所能動態設定的最大值,不能動態調整,須要重啓數據庫。

2

①數據高速緩衝區(Database Buffer Cache):數據高速緩衝區存儲了從數據文件中檢索到的數據塊的鏡像拷貝。

   △獲取和修改數據提升了性能

   △經過LRU算法管理

   △db_block_size決定了主塊大小

   △定義緩衝區數取決於db_block_size

②共享池(Shared Pool):存儲最近執行過的sql語句和最近使用過的數據定義。在分析階段,服務器進程使用 SGA 中稱做共享池的區域來編譯 SQL 語句。

   △包括兩個與性能有關的內存結構

     庫緩存:存儲最近使用的SQL 語句信息。若是從新執行 SQL 語句並且共享 SQL 區域已經包含語句的執行計劃,那麼服務器進程就不須要分析語句。庫高速緩存經過減小分析時間和內存要求來改善從新使用 SQL 語句的應用程序的性能。

     數據字典緩存:數據庫中最近使用的定義的集合。它包括有關數據庫文件、表、索引、列、用戶、權限以及其它數據庫對象的信息。

   △調整共享池大小(shared_pool_size)

     alter  system set  shared_pool_size  =  「X」;

③重作日誌緩衝區(Redo Log Cache):緩存對於數據塊的全部修改,主要用於恢復其中的每一項修改記錄。

   △修改記錄叫作重作條目

   △重作條目包含重構和重作修改信息

   △log_buffer定義大小

注:執行DDL或DML語句時,服務器進程首先將事務變化記載到重作日誌緩衝區,而後纔會修改數據高速緩存。

④大池:一個可選的SGA區域,能夠緩解共享池(Shared Pool)負擔。PARALLEL_AUTOMATIC_TUNING = TURE,大池的空間是動態的,由系統控制。

   △主要做用:共享服務器的會話區域(UGA),服務器進程I/O,使用RMAN備份恢復,並行查詢緩存信息。

   △不使用LRU鏈表管理

   △指定大小,alter  system  set  large_pool_size = 「X」;

   △動態指定大小

查看大池已使用或未使用內存

3

注:若是發現未使用內存很大或者不斷增長,表示大池可能分配了太多的內存,若是未使用內存很小或者不斷減小,表示可能須要加大大池的內存。

⑤java池:可選的SGA區域,屬於SGA中的可變區域,Java池的內存用於存儲全部會話中特定Java程序代碼和JVM中的數據

   △java命令須要分析的環境

   △安裝使用java須要

   △由參數JAVA_POOL_SIZE設置。Java池最大可到1 GB,不能動態調整。

查看java已使用或未使用內存

4

注:若是發現未使用內存很大或者不斷增長,表示JAVA池可能分配了太多的內存,若是未使用內存很小或者不斷減小,表示可能須要加大JAVA池的內存。

3、進程全局區(PGA)

進程全局區(PGA):此區域包含單個服務器進程或單個後臺進程的數據和控制信息,與幾個進程共享的SGA 正相反。PGA 是隻被一個進程使用的私有區域。PGA 在建立進程時分配,在終止進程時回收。

進程全局區(PGA)包括如下組件:

   △排序區:用於處理 SQL 語句時可能須要的任何排序

   △會話信息:包括用於會話的用戶權限和性能統計

   △遊標狀態:標明處理會話當前使用的 SQL 語句中的階段

   △遊標狀態:標明處理會話當前使用的 SQL 語句中的階段

PGA 在建立進程時分配,在終止進程時回收。

擴展閱讀(網絡參考資料,如下資料歸屬網絡做者,請注重「版權」)

http://v.youku.com/v_show/id_XMzQ5OTE0OTQ0.html                             sga視頻
http://blog.csdn.net/yujin2010good/article/details/7709120                  oracle體系結構
http://database.51cto.com/art/201010/231747.htm                             oracle內存結構SGA
http://blog.csdn.net/robinson_0612/article/details/5534832                  oracle10gSGA自動化管理
http://soft.chinabyte.com/database/397/12311397.shtml                       oracle體系結構介紹
http://blog.csdn.net/yujin2010good/article/details/7709120                  oracle體系結構詳解
http://blog.csdn.net/tianlesoftware/article/details/5594080                  oracle內存架構詳解
http://vb118.blog.163.com/blog/static/173933100201142531527355/              oracle sga

相關文章
相關標籤/搜索