Oracle結構-執行個體的進程結構

來源:互聯網
上載者:User
Oracle執行個體的進程結構這裡所講的裡程是指Unix系統中的進程,在Windows中,Oracle是一個作業系統服務。
  Oracle執行個體由記憶體地區和後台進程組成。
  Oracle執行個體分為單進程執行個體(一個進程執行全部的Oracle代碼,只允許單個使用者存取)和多進程執行個體(由多個進程執行Oracle代碼的不同部分,對於每一個串連的使用者都有一個進程,允許多個使用者同時使用)。
  在多進程結構中,除伺服器處理序(請注意,此“伺服器處理序”不是指所有的執行個體中的進程,見下面的說明)外,還有其他後台進程,包括:Dnnn,DBWR,LGWR,ARCH,PMON,SMON,CKPT,RECO等。在資料庫啟動後,這些進程常駐作業系統。Oracle中所有進程的數量之和不能超過參數PROCESS設定的值:
  sql>show parameter process
  當Oracle用戶端應用程式與Oracle執行個體串連的時候,Oracle會產生一個伺服器處理序來為這些客戶服務,此進程在widnows下表現為線程。此進程的主要作用有:對於使用者發出的SQL語句進行文法分析,編譯,執行使用者的SQL語句,如是資料區塊不在資料緩衝區時,則從磁碟資料檔案將資料讀入到SGA的共用資料緩衝區中,將SQL語句的執行結果返回組應用程式。下面的語句用來查詢資料庫中的使用者會話資訊。
sql>select substr(s.sid,1,3) sid,substr(s.serial#,1,5) ser,spid,substr(schemaname,1,10) schema,substr(type,1,3) typ,substr(decode((consistent_gets+block_gets),0,'None',(100*(consistent_gets+block_gets-physical_reads)/consistent_gets+block_gets))),1,4) "%hit",value cpu,substr(block_changes,1,5) bchng from v$process p,v$sesstat t,v$sess_io i,v$session s where i.sid=s.sid and p.addr=paddr(+) and s.sid=t.sid and t.statistic#=12;
結果中:
sid 表示會話ID號,
ser 表示會話serial#號,serial#與sid組合以唯一表示一個會話,
spid 表示作業系統進程號,
schema 表示資料庫使用者名稱,
typ 表示進程類型,use為使用者進程,bac為後台進程
%hit 表示資料緩衝區命中率,
cpu 表示使用cpu的時間,
bchng 表示修改了的資料區塊的個數。

下面介紹各個後台進程。
1. DBWR進程
DBWR(Database Writer)進程將緩衝區中的資料寫入資料檔案,負責資料緩衝區的管理。
當資料緩衝區中的一個資料被修改後,被標記為“髒”,DBWR進程負責將“髒”資料寫入磁碟。
DBWR採用LRU演算法來替換資料緩衝區中的資料。
DBWR的作用包括:
1) 管理資料緩衝區,以便伺服器處理序總能找到空閑緩衝區
2) 將所有修改後的緩衝區中的資料寫入資料庫檔案
3) 使用LRU演算法將最近使用過的塊保留在記憶體中
4) 通過延遲寫來最佳化磁碟i/o.
在下列情況下DBWR要將髒資料寫入磁碟資料檔案:
1) 當一個伺服器處理序將緩衝資料區塊移“髒表”,面該髒表達到一定程度進。(該臨界長度由參數DB_BLOCK_WRITE_BATCH決定)
2) 當一個伺服器處理序在LRU表中尋找DB_BLOCK_MAX_SCAN_CNT緩衝區時,沒有查到閒置緩衝區
3) 出現逾時
4) 檢查點發生時
在一個Oracle執行個體中,允許啟動多個DBWR進程,DBWR進程個數由參數DB_WRITE_PROCESSES指定,上限為20,進程名依次自動命名為:DBW0,DBW1,DBW2...DBW19。
sql>show parameter processes

2. LGWR進程
  LGWR(Log Writer)進程將日誌資料從日誌緩衝區中寫入磁碟記錄檔中。
關於LGWR進程的工作時機可以看我寫的第一篇《一次事務過程》。
LGWR的寫盤條件是:
1) 發生提交,即commit;
2) 日誌緩衝區達到總數的1/3時;
3) 逾時;
4) DBWR進程需要為檢驗點清除緩衝區時。
每一個Oracle執行個體只有一個LGWR進程。
LGWR將日誌資訊同步的寫入到記錄檔組的多個日誌成員中,如果組中的一個成員檔案被刪除或不可使用,LGWR將日誌資訊繼續寫到該組的其他檔案中,不影響資料庫的運行。

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

4. PMON進程
  PMON(Process Monitor),進程監控裡程,在伺服器處理序出現故障時執行進程恢複,負責清理記憶體記憶體和釋放該進程所使用的資源。

5. ARCH進程
  ARCH(Archive Process,歸檔進程)在日誌存滿時將日誌資訊寫到磁碟或磁帶,用於介質失敗時的恢複。
  日誌資訊首先產生於日誌緩衝區,再由日誌寫入進程LGWR將日誌資料寫入記錄檔組,日誌切換時,由歸檔進程ARCH將日誌資料從記錄檔組中寫入歸檔日誌中。
  在一個資料庫執行個體中,歸檔進程最多可以啟動10個,進程名依次自動命名為ARC0,ARC1,ARC2...ARC9,設定方法是:在參數檔案中增加參數LOG_ARCHIVE_MAX_PROCESSES。關於如何啟用資料庫的自動歸檔,在前面的《物理結構》一篇中已有說明,這裡說明一個幾個相關的參數:
1) LOG_ARCHIVE_DEST:用於設定歸檔日誌的檔案儲存體目錄
2) LOG_ARCHIVE_DUBLEX_DEST:用於設定歸檔記錄檔的鏡像儲存目錄,此參數在oracle 8及以上的版本中支援
3) LOG_ARCHIVE_DEST_n:用於設定更多的鏡像目錄,其中,1<=n<=10,該參數有以下三個選項:
(1)MANDATORY:表示必須完成此目錄的歸檔,才可以切換。
(2)REOPEN:歸檔目錄或介質失敗後,需等多長時間能重新寫入日誌,預設時間為300秒。
(3)OPTIONAL:不管是否歸檔完成都進行切換,這是預設
舉例如下:
LOG_ARCHIVE_DEST_1='LOCATION=/u01/oracle/archive/
                    MANDATORY
                    REOPEN=500'
LOG_ARCHIVE_DEST_2='LOCATION=/u02/oracle/archive/
                    OPTIONAL'
LOG_ARCHIVE_DEST_n只適用於oracle 8i及以上的版本。
4) LOG_ARCHIVE_DEST_STATE_n:用於對歸檔日誌目錄進行失效或生效,該參數與LOG_ARCHIVE_DEST_n一一相對應。如:
LOG_ARCHIVE_DEST_STATE_1=DEFER
LOG_ARCHIVE_DEST_STATE_2=ENABLE
此參數可以線上設定:
sql> ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_1=DEFER;
此參數只適用於oracle 10g及以上版本。

6. CKPT進程
  CKPT(CheckPoint,檢查點)進程出現時,系統對全部資料庫檔案及控制檔案的檔案頭的同步號進行修改,以保證資料庫的同步。
  以下兩個參數是對CKPT有影響的:
LOG_CHECKPOINT_TIMEOUT:決定產生一個檢驗點的時間間隔,單位為秋,預設為1800;
LOG_CHECKPOINT_INTERVAL:執行一個檢驗點需要填充的記錄檔塊的數目,預設為0,表示不起作用。
  系統對於資料庫的改變資訊用系統改變號SCN表示,SCN也叫檢驗點號,在日誌中用CHECKPOINT_CHANGE#表示,它是資料檔案,記錄檔,控制檔案的同步的同步依據,同時儲存在這三個中,在系統改變時,檢驗點號也會同時改變。
  引起CKPT產生的主要時機有:
1)日誌切換時
2)達到LOG_CHECKPOINT_TIMEOUT指定的間隔時間
3)達到LOG_CHECKPOINT_INTERVAL指定的日誌塊數
4)資料庫關閉
5)DBA強制產生
6)資料表空間OFFLINE時

7. RECO進程
  RECO(Recover,恢複)進程用於分散式資料庫系統,RECO進程自動地解決在分散式資料庫中的事務故障。

8. LCKn進程
  LCKn(鎖進程)用於Oracle並行伺服器環境下,用於多個執行個體間的封鎖,該進程最多可以啟動10個。

9. Dnnn進程
  Dnnn(Despatcher,調度)進程。用於多線程伺服器體繫結構中。詳見下一篇《Oracle串連配置結構》

10. SNP進程
  SNP是作業進程,主要用於分散式資料庫中,進行資料庫之間快照的自動重新整理,並同時通達DBMS_JOB程式包自動運行預定的預存程序,SQL,PL/sql程式等。有兩個參數用來控製作業進程的計劃:
1) JOB_QUEUE_PROCESS:用於設定作業進程個數
2) JOB_QUEUE_INTERVAL:用於設定作業進程被周期性喚醒的時間間隔

後台進程跟蹤資訊
  所有修改資料庫結構的命令會自動被後台進程追蹤記錄,跟蹤資訊由oracle後台進程自動儲存,追蹤檔案的名稱為alter_SID。此檔案的儲存目錄由參數BACKGROUND)DUMP_DEST指定。
  可以用工具命令TKPROF來格式化追蹤檔案,如:
$tkprof oralogfile1.log
  除了跟蹤後台進程外,還可以啟用參數SQL_TRACE對使用者的語句進行跟蹤。修改參數檔案:
TIMED_STATISTICS=TRUE
USER_DUMP_DEST=目錄名
MAX_DUMP_FILE_SIZE=5M
SQL_TRACE=TRUE
或者:
SQL>ALTER SESSION SET SQL_TRACE=TRUE對當前會話進行SQL跟蹤。

鎖等待問題與KILL SESSION
  為了保證資料的一致性,系統提供鎖機制。有關鎖的概念可以參數《資料庫系統概論》一書。要瞭解當前在等待鎖資源的使用者:
sql>select a.username,a.sid,a,serial#,b.id1 from v$session,v$lock where a.lockwait=b.kaddr;
要瞭解鎖住其它使用者的使用者進程:
SQL>SELECT A.USERNAME,A.SID,A,SERIAL#,B.ID1 FROM V$SESSION A,V$LOCK B WHERE B.ID1 IN (SELECT DISTINCT E.ID1 FROM V$SESSION D,V$LOCK E WHERE D.LOCKWAIT=E.KADDR) AND A.SID=B.SID AND B.REQUEST=0;

  殺死session: sql>alter system kill session sessionid,serial#

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.