2.oracle記憶體結構和後臺程序02
1.前言
前面主要講解share pool以及database buffer cache,接下來繼續進行說SGA中其它的元件
2.redo buffer cache
redo log buffer中主要儲存的是資料庫產生的redo資料,它主要以日誌條目(redo entries)方式記錄了資料庫的所有修改資訊(包括DML和DDL),目的是為資料庫恢復,日誌條目首先產生與日誌緩衝區中,日誌緩衝區一般較小,一般預設值在3M~15M之間,它是以位元組為單位,show parameter log_buffer 日誌緩衝區的大小啟動後就是固定不變的,如要調整隻能通過修改引數檔案後再重新啟動生效,不能動態修改,不能有SGA自動管理。
3.large pool(可選)
為了進行大的後臺批處理操作而分配的記憶體空間,主要用於共享伺服器的session memory(UGA),RMAN備份恢復以及並行查詢等操作。有助於降低shared pool碎片。
4.java pool(可選)
為了java虛擬機器及應用而分配的記憶體空間,包含所有session指定的JAVA程式碼和資料
5.stream pool(可選)
為了stream process而分配的記憶體空間。stream技術是為了在不同資料庫之間共享資料,因此,它只對使用了stream資料庫特性的系統是重要的。
Oracle程序
1)user process;
客戶端的process,訪問oracle資料一般有三種方式:1.sql*plus, 2.應用程式 3.web方式(EM)
2) server process;
服務端的程序,user process 不能直接訪問oracle,必須通過相應的server process 訪問例項,進而訪問資料庫
例如當我們用sql*plus連線oracle資料庫時,再用ps -ef|grep LOCAL檢視程序時
[oracle@node04 trace]$ ps -ef|grep LOCAL oracle 44437 44436 0 21:51 ? 00:00:00oracleorcl (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq))) oracle 44458 10966 0 21:52 pts/1 00:00:00 grep --color=auto LOCAL
其中:local=yes是本地連線,本地連線不走監聽,所以在服務監聽沒有啟動的情況下,通過本地的sqlplus還是可以連上資料庫的
local=no表明是遠端連線,或者說是網路連線,它是通過Listener連線到伺服器的。 客戶端的應用通過客戶端的監聽向伺服器的監聽傳送請求,伺服器的監聽接收後,在與資料庫連線,執行相關操作,在把結果返回給客戶端。 這是通過監聽的流程。 所以在客戶端需要配置監聽,即配置tnsnames.ora。
可以在oracle檢視V$process檢視,它包括了當前所有的後臺程序和伺服器程序。
SQL> select pid,program,background from v$process; background欄位為1是background process,其餘都是server process
3) background process
1.smon程序:1)當例項崩潰後,oracle會自動恢復例項,且在RAC下,一個節點的smon可以對另外一個節點做例項恢復 2)清理和釋放臨時段上的資料(排序,臨時表)。3)對於DMT(字典管理表空間),smon可以合併連續空閒的extent 4)維護回滾段的online.offline以及空間回收。
2.pmon程序:1)當user process失敗時,清理出現故障的程序,釋放所有當前掛起的鎖定,釋放伺服器端使用的資源,2)監聽空閒會話是否達到閾值,3)動態註冊監聽
3.DBWn 程序:負責將buffer cache中髒資料(修改過的資料)塊寫到磁碟上,釋放資料緩衝區空間由於資料塊在磁碟上的位置不連續,這個過程會比LGWR比較耗時。
可以通過設定多個DBWn程序加快髒, db_writer_processes觸發條件:1)DBWn接到checkpoint的指令,將髒資料寫到磁碟上。2)當server process無法在buffer cache中無法找到可用的buffer時。3)髒塊太多時(閾值) 4)db_buffer自由空間不夠時 5)表空間read only/offline/backup模式等 以上任意一個條件觸發時,dbwn都會被觸發,
4 lgwr 程序:LGWR負責將log buffer中的資料順序的寫到磁碟上的online redo file,由於是順序的寫入,效率要比DBWn高很多。
lgwr觸發條件:
-使用者提交事務(commit)
-日誌切換
-最後一次提交經過了3秒
-redo log buffer容量達到了1/3或者達到了1M的redo資料。
-DBWN程序在把髒資料寫入磁碟之前,必須保證這些髒資料對應的日誌資訊已經被寫入磁碟,如果發現髒資料的日誌資訊沒有吸入磁碟,DBWn通知LGWR程序寫日誌資訊,完成後繼續講髒資料寫入磁碟。
5.ckpt程序:CKPT程序通知DBWn程序開始將記憶體(buffer cache)中的髒資料寫到磁碟的檔案上。CKPT負責更新檔案頭和控制檔案的資訊。
作用:通知或督促dbwr寫髒塊
1)完全檢查點:保證資料庫的一致性。
2) 增量檢查點:不斷更新控制檔案中的檢查點位置,當發生例項崩潰時,可以儘量縮短例項恢復的時間。
3) 區域性檢查點:特定的操作下,如針對某個表空間read only/offline、Shrink資料檔案、ALTER TABLESPACE BEGIN BACKUP等
6.ARCn程序
歸檔程序,當資料庫處於歸檔模式時(archive mode),ARCn負責將online redo file歸檔到目標儲存位置,用於資料庫的恢復,當線上日誌切換時,會觸發ARCn程序將線上日誌檔案歸檔
ARCn程序在data guard下,負責將日誌向standby 伺服器傳送。
PGA的基本元件:
pga全稱:程式全域性區(Program Global Area)
-不同於SGA,PGA屬於獨佔式記憶體區,它的資料和控制資訊為某個會話所獨有,當一個會話產生時,Oracle會為這個會話分配一個PGA記憶體區域。
-PGA屬於單個的服務端程序或者後臺程序,而例項級別說的PGA,通常指的是所有這些會話佔用的PGA的總和,也就是由引數pga_aggregate_target設定的值
主要作用:
1)快取來自伺服器程序和後臺程序的資料和控制資訊
2)提供排序、hash連線
3)不提供session之間的共享
4)PGA在程序建立時被分配,程序終止時被釋放。所有程序的PGA之和構成了PGA的大小。
PGA的管理是比較複雜的,9i後,Oracle推薦使用PGA自動管理,遮蔽了PGA的複雜性。