Oracle體繫結構:記憶體結構和進程結構

來源:互聯網
上載者:User
oracle|進程|體系

(一)記憶體結構和進程結構 Oracle資料庫的總體結構如下圖:

 1:Oracle執行個體(Instance)        
  在一個伺服器中,每一個啟動並執行Oracle資料庫都與一個資料庫執行個體相聯絡,執行個體是我們
 訪問資料庫的手段。
  執行個體在作業系統中用ORACLE_SID來標識,在Oracle中用參數INSTANCE_NAME來標識,
 它們兩個的值是相同的。資料庫啟動時,系統首先在伺服器記憶體中分配系統全域區(SGA),
 構成了Oracle的記憶體結構,然後啟動若干個常駐記憶體的作業系統進程,即組成了Oracle的
 進程結構,記憶體地區和後台進程合稱為一個Oracle執行個體。
                 


  資料庫與執行個體之間是1對1/n的關係,在非並行的資料庫系統中每個Oracle資料庫與一個
 執行個體相對應;在並行的資料庫系統中,一個資料庫會對應多個執行個體,同一時間使用者只與一個
 執行個體相聯絡,當某一個執行個體出現故障時,其他執行個體自動服務,保證資料庫正常運行。在任何
 情況下,每個執行個體都只可以對應一個資料庫。

 2:Oracle 10g動態記憶體管理
  記憶體是影響資料庫效能的重要因素,Oracle8i使用靜態記憶體管理,Oracle 10g使用動態
 記憶體管理。所謂靜態記憶體管理,就是在資料庫系統中,無論是否有使用者串連,也無論並發用
 量大小,只要資料庫服務在運行,就會分配固定大小的記憶體;動態記憶體管理允許在資料庫服
 務運行時對記憶體的大小進行修改,讀取大資料區塊時使用大記憶體,小資料區塊時使用小記憶體,讀
 取標準記憶體塊時使用標準記憶體設定。
  按照系統對記憶體使用量方法的不同,Oracle資料庫的記憶體可以分為以下幾個部分:
  •系統全域區:SGA(System Global Area)
  •程式全域區:PGA(Programe Global Area)
  •排序池:(Sort Area)
  •大池:(Large Pool)
  •Java池:(Java Pool)

 2-1:系統全域區SGA(System Global Area)
   SGA是一組為系統分配的共用的記憶體結構,可以包含一個資料庫執行個體的資料或控制信
  息。如果多個使用者串連到同一個資料庫執行個體,在執行個體的SGA中,資料可以被多個使用者共用。
  當資料庫執行個體啟動時,SGA的記憶體被自動分配;當資料庫執行個體關閉時,SGA記憶體被回收。
  SGA是佔用記憶體最大的一個地區,同時也是影響資料庫效能的重要因素。
  SGA的有關資訊可以通過下面的語句查詢,sga_max_size的大小是不可以動態調整的。
   =====================================
   SQL> show parameter sga
   NAME                                 TYPE        VALUE
   ------------------------------------ ----------- --------
   lock_sga                             boolean     FALSE
   pre_page_sga                         boolean     FALSE
   sga_max_size                         big integer 164M
   sga_target                           big integer 0
   
   SQL> alter system set sga_max_size=100m;
   alter system set sga_max_size=100m
                 *
   ERROR at line 1:
   ORA-02095: specified initialization parameter cannot be modified
   ======================================  
  

系統全域區按作用不同可以分為:
   •資料緩衝區
   •日誌緩衝區
   •共用池

  2-1-1:資料緩衝區(Database Buffer Cache)
    如果每次執行一個操作時,Oracle都必須從磁碟讀取所有資料區塊並在改變它之後
   又必須把每一塊寫入磁碟,顯然效率會非常低。資料緩衝區存放需要經常訪問的資料,
   供所有使用者使用。修改資料時,首先從資料檔案中取出資料,儲存在資料緩衝區中,
   修改/插入資料也儲存在緩衝區中,commit或DBWR(下面有詳細介紹)進程的其他條
   件引發時,資料被寫入資料檔案。
    資料緩衝區的大小是可以動態調整的,但是不能超過sga_max_size的限制。
   ======================================
   SQL> show parameter db_cache_size
   NAME                                 TYPE        VALUE
   ------------------------------------ ----------- -----------------
   db_cache_size                        big integer 24M
   
   SQL> alter system set db_cache_size=128m;
   alter system set db_cache_size=128m
   *
   ERROR at line 1:
   ORA-02097: parameter cannot be modified because specified value is invalid
   ORA-00384: Insufficient memory to grow cache

   SQL> alter system set db_cache_size=20m;
   System altered.
   
   SQL> show parameter db_cache_size;
   NAME                                 TYPE        VALUE
   ------------------------------------ ----------- -----------------
   db_cache_size                        big integer 20M
   
   #此處我僅增加了1M都不行?
   SQL> alter system set db_cache_size=25m;
   alter system set db_cache_size=25m
   *
   ERROR at line 1:
   ORA-02097: parameter cannot be modified because specified value is invalid
   ORA-00384: Insufficient memory to grow cache

   #修改顯示格式,方便查看。
   SQL> column name format a40 wrap
   SQL> column value format a20 wrap
   
   #下面語句可以用來查看記憶體空間分配情況,注意SGA各區大小總和。
   SQL> select name,value from v$parameter where name like '%size' and value <> '0';
   
   #先將java_pool_size調小,然後再修改db_cache_size
   SQL> show parameter java_pool_size;
   NAME                                 TYPE        VALUE
   ------------------------------------ ----------- -----
   java_pool_size                       big integer 48M

   SQL> alter system set java_pool_size=20m;
   System altered.

   SQL> alter system set java_pool_size=30m;
   System altered.
   #上面說明SGA中各區大小總和不能超過sga_max_size。
   =====================================
    資料緩衝區的大小對資料庫的存區速度有直接影響,多使用者時尤為明顯。有些應
   用對速度要求很高,一般要求資料緩衝區的命中率在90%以上。
    下面給出一種計算資料緩衝區命中率的方法:
    •使用資料字典v$sysstat
    =====================================
    SQL> select name, value from v$sysstat
         2  where name in('session logical reads',
         3  'physical reads',
         4  'physical reads direct',
         5  'physical reads direct (lob)')
    NAME                              VALUE
    ------------------------------- ----------
    session logical reads               895243
    physical reads                       14992
    physical reads direct                   34
    physical reads direct (lob)              0
    ======================================
    命中率=1-(14992-34-0)/895243

    可以讓Oracle給出資料緩衝區大小的建議:
    ======================================
    SQL> alter system set db_cache_advice=on;#開啟該功能
    System altered.

    SQL> alter system set db_cache_advice=off;#關閉該功能
    System altered.
    ======================================

2-1-2:日誌緩衝區(Log Buffer Cache)
    日誌緩衝區用來儲存資料庫的修改資訊。該區對資料庫效能的影響很小,有關日
   志後面還會有詳細的介紹。
    查詢日誌緩衝區大小:


   如上圖:
    •Stack Space是用來儲存使用者會話變數和數組的儲存地區;
    •User Session Data是為使用者會話使用的附加儲存區。
     |--Session Information
     |--Sort Area
     |--Cursor Information   
   注意Session information(使用者會話資訊)在獨佔伺服器中與在共用伺服器中所處
  的記憶體地區是不同的。


 2-3:排序區,大池,Java池
   排序區(Sort Area)為有排序要求的SQL語句提供記憶體空間。系統使用專用的記憶體區
  域進行資料排序,這部分空間就是排序區。在Oracle資料庫中,使用者資料的排序可使用
  兩個地區,一個是記憶體排序區,一個是磁碟臨時段,系統優先使用記憶體排序區進行排序。
  如果記憶體不夠,Orcle自動使用磁碟暫存資料表空間進行排序。為提高資料排序的速度,建議
  盡量使用記憶體排序區,而不要使用臨時段。
   參數sort_area_size用來設定排序區大小。(好象不能動態修改?)

   大池(Large Pool)用於Database Backup工具--復原管理員(RMAN:Recovery Manager)。
  Large Pool的大小由large_pool_size確定,可用下面語句查詢和修改:
  =========================================
  SQL> show parameter large_pool_size
  NAME                  TYPE        VALUE
  -----------------   ----------- -------
  large_pool_size     big integer      8M

  SQL> alter system set large_pool_size=7m;
  System altered. 
  =========================================
   
   Java池主要用於Java語言開發,一般來說不低於20M。其大小由java_pool_size來
  確定,可以動態調整。

 2-4:Oracle自動共用記憶體管理(Automatic Shared Memory(SGA) Management)
  在Oracle 8i/9i中資料庫管理員必須手動調整SGA各區的各個參數取值,每個區要根據
 負荷輕重分別設定,如果設定不當,比如當某個區負荷增大時,沒有調整該區記憶體大小,則
 可能出現ORA-4031:unable to allocate ...bytes of shared memory錯誤。
  在Oracle 10g中,將參數STATISTICS_LEVEL設定為TYPICAL/ALL,使用SGA_TARGET指
 定SGA區總大小,資料庫會根據需要在各個組件之間自動分配記憶體大小。
 下面是系統自動調整的地區:
  •固定SGA區及其他•共用池•資料緩衝區• Java池•大池。
  注意:如果不設定SGA_TARGET,則自動共用記憶體管理功能被禁止。
  ==========================================
  SQL> show parameter statistics_level
  NAME                     TYPE        VALUE
  --------------------- ----------- ------------
  statistics_level      string      TYPICAL
  
  SQL> alter system set statistics_level=all;
  System altered.

  #typical和all有什麼區別?
  
  SQL> alter system set statistics_level=typical;
  System altered.

  SQL> show parameter sga_target
  NAME            TYPE        VALUE
  ------------- ----------- ----------
  sga_target    big integer 0

  SQL> alter system set sga_target=170m;
  alter system set sga_target=170m
  *
  ERROR at line 1:
  ORA-02097: parameter cannot be modified because specified value is invalid
  ORA-00823: Specified value of sga_target greater than sga_max_size

  SQL> alter system set sga_target=20m;
  System altered.

  #不過後來又發現sga_target的值變成了140M? 下面是語句執行情況。
  SQL> show parameter sga_target
  NAME          TYPE        VALUE
  ------------- ----------- -------
  sga_target    big integer 140M
  
  SQL> alter system set sga_target=0;
  System altered.

  SQL> show parameter sga_target
  NAME                                 TYPE        VALUE
  ------------------------------------ ----------- ------
  sga_target                           big integer 0

  #改為20M
  SQL> alter system set sga_target=20m;
  System altered.

  #顯示的是140M
  SQL> show parameter sga_target
  NAME                                 TYPE        VALUE
  ------------------------------------ ----------- ------
  sga_target                           big integer 140M

  #不可縮減?
  SQL> alter system set sga_target=130m;
  alter system set sga_target=130m
  *
  ERROR at line 1:
  ORA-02097: parameter cannot be modified because specified value is invalid
  ORA-00827: could not shrink sga_target to specified value
  
  #不可增加
  SQL> alter system set sga_target=141m;
  alter system set sga_target=141m
  *
  ERROR at line 1:
  ORA-02097: parameter cannot be modified because specified value is invalid
  ORA-00823: Specified value of sga_target greater than sga_max_size
  
3:Oracle執行個體的進程結構(Process Structure)
 Oracle包含三類進程:
 •使用者進程(User Process)
 •伺服器處理序(Server Process)
 •後台進程(Background Process)
 
 3-1:使用者進程和伺服器處理序
  當資料庫使用者請求串連到Oracle的服務時啟動使用者進程(比如啟動SQLPlus時)。
  •使用者進程首先必須建立一個串連。
  •使用者不能直接與Oracle伺服器,必須通過伺服器處理序互動。
  •伺服器處理序是使用者進程與伺服器互動的橋樑,它可以與Oracle Server直接互動。
  •伺服器處理序可以有共用和獨佔兩種形式。
               
 


3-2:後台進程(Backgroung Process)
  資料庫的物理結構與記憶體結構之間的互動要通過後台進程來完成。資料庫的後台進程包
 含兩類,一類是必須的,一類是可選的:
  •Mandatory background processes

 3-2-2:LGWR(Log Writer,日誌寫入進程)
  將日誌資料從日誌緩衝區寫入磁碟記錄檔組。資料庫在運行時,如果對資料庫進行修
 改則產生日誌資訊,日誌資訊首先產生於日誌緩衝區。當日誌達到一定數量時,由LGWR將
 將日誌資料寫入到記錄檔組,再經過日誌切換,由歸檔進程(ARCH)將日誌資料寫入歸
 檔進程(前提是資料庫運行在歸檔模式下)。資料庫遵循寫日誌優先原則,即在寫資料之前
 先寫日誌。
    

簡單介紹
  •ARCH(Archiver,歸檔進程)
  Oracle資料庫有兩種運行模式,歸檔(ARCHIVELOG),非歸檔(NOARCHIVELOG)模式。
 以非歸檔模式運行時日誌在切換時被直接覆蓋,不產生歸檔日誌,這是資料庫預設的運行模
 式。資料庫運行在歸檔模式時,在日誌切換之前,由ARCH進程將日誌資訊寫入磁碟,也就是
 自動備份線上日誌。
  Oracle資料庫的Redo檔案數量是有限的,所以Oracle以迴圈的方式向它們中寫入。它順
 序寫滿每一個Redo檔案,當達到最後一個時,再迴圈回去開始填寫第一個Redo檔案。如果為
 了能恢複資料庫而想儲存記錄檔,那麼在它們被重新使用之前需要對其進行備份,歸檔進
 程管理此工作。

  •CKPT(Check Point,檢查點進程)
  運行CKPT時,系統對全部資料檔案及控制檔案檔案頭的同步訊號進行修改,以保證資料
 庫的同步。檢查點出現在以下情況:
  |--在每個日誌切換時產生。
  |--上一個檢驗點之後又經過了指定時間。
  |--從上一個檢驗點之後,當預定義數量的日誌塊被寫入磁碟之後。
  |--資料庫關閉。
  |--DBA強制產生。
  |--當資料表空間設定為OFFLINE時。

  •SMON(System Moniter,系統監控進程)
  SMON在執行個體啟動時執行執行個體恢複,並負責清理不再使用的臨時段。

  •PMON(Process Monitor,進程監控)
  PMON在使用者進程出現故障時進行恢複,負責清理記憶體地區和釋放該進程所使用的資源。

  •RECO(Recovery,恢複進程)
  RECO用於分散式資料庫維持在分布式環境中的資料的一致性。

  •LCKn(Lock,鎖進程)
  在並行伺服器中用於多個執行個體間的封鎖。

  •Dnnn(Dispatcher,調度進程)
  Dnnn存在於多線程伺服器體繫結構中,負責將使用者進程串連到伺服器處理序,再把結果返
  回給使用者進程。



相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.