Oracle 常見進程


1 服務器進程

   專用服務器連接:數據連接跟服務器上的一個進程之間存在1:1的映射

   共享服務器連接:多個會話共享一個服務器進程池,由一個調度程序分配

1.1 專用服務器連接

專用服務器連接模式下,客戶連接跟服務器進程之間一對一的映射,如果有100條專用服務器連接,就會有相應的100個進程在執行

1.2 共享服務器連接

共享服務器連接強制使用oracle net,客戶跟服務器在一個主機也不例外,如果不使用oracle TNS監聽,就無法使用共享服務器,客戶發出請求,由一個調度程序來分配、

1.3 連接與會話

一條連接上可以建立0個1個或多個會話,各個會話單獨,

連接只是客戶進程和數據庫實例之間的一條特殊線路,最常見就是網絡連接,

會話是實例中存在的一個邏輯實體,

1.4 專用服務器和共享服務器

1.4.1 何時使用專用服務器

      由於1:1的關系,不必擔心長時間運行的事務會阻塞其他事務,其他事務通過自己的專用進程來處理,在非OLTP環境中,有長時間的運行一個事務,就適合用專用服務器

1.4.2 何時使用共享服務器

      由於多對1的關系,多個客戶對應一個共享服務器,如果一個DBMS_LOCK.SLEEP(20)就會獨占共享服務進程20秒的時間,如果獨占共享服務器資源,系統就好像掛起,

  串行?,使用共享服務器的原則是要確保事務的持續時間盡量短,事務可以頻繁的執行,但必須在短時間內執行完,

  共享服務器只使用於OLTP系統,適應事務短且頻繁,

  如果要使用oracle net連接池,就必須使用共享服務器

 如果要使用db link,也必須用共享服務器

 共享服務器的潛在好處:減少系統進程或線程數,刻意的限制並發,減少系統所需要的內存

小結:除非系統負載過重,或要使用特定的性能使用共享服務器,否則最好使用專用服務器,設置簡單,調優容易。

 

2  后台進程

Oracle實例的一部分是內存sga,另一部分就是后台進程,可以通過2個視圖來看后台進程

  select * from v$bgprocess 后台啟動的進程

select * from v$process 正在運行的進程

select paddr, name, description

     from v$bgprocess

     where paddr <> '00' 

    order by paddr desc

2.1 dbwr進程

  sga中的數據緩沖區的數據塊被修改后,該數據塊就會被標記為臟塊,當數據緩沖區的空間不足時,就會觸發該進程把臟塊寫入到數據文件,

   讀取臟塊時也是有lru規則,並不是將所有臟塊一次寫入數據文件中,當滿足下列條件是會觸發dbwr進程:

當有數據寫入緩沖區,發現空間不夠,就會觸發,按照lru規則寫入數據文件(分散寫)

執行檢查點(ckpt進程)

   默認情況下,oracle只啟動一個dbwr進程,dbwr0,最大不超過20個,建議不要超過系統的cpu的數量和磁盤的數量

要修改dbwr進程數量,參數db_writer_processed,默認1,不支持動態修改,重啟后生效,

2.2 lgwr進程

日志寫進程,將重做日志緩沖區的內容寫入到重做日志(磁盤),修改的記錄首先生成重做記錄,

該進程觸發條件

3秒一次

事務條件(含ddl)

重做日志緩沖區寫滿1/3或者緩沖區達到1mb的日志

Dbwr進程寫臟塊到數據文件,如果這部分數據對應的重做日志信息尚未寫入到重做日志文件的話,會先等lgwr進程將臟塊緩存涉及的重做記錄寫入到日志文件,然后在將其寫入到數據文件,

日志寫進程是順序寫,比dbwr進程的分散寫快,一個事務提交后,只要日志寫入到在線重做日志文件中,就會返回成功。

2.3 ckpt檢查點進程

dbwr進程寫臟塊到數據文件時,必須要對控制文件和數據文件進行更新,

建立檢查點后,oracle數據文件知道記錄到了什么位置,當數據庫發生崩潰,可以根據重做日志來重建崩潰前的修改,

觸發檢查點的條件:

重做日志切換

系統收到alter system checkpoint;命令

將表空間置為offline脫機/read only 只讀/backup 備份狀態,(只會寫入相關表空間的臟塊信息)

通過初始化參數設置控制檢查點的執行頻率,如Log_checkpoint_timeout初始化參數可以控制臟塊在數據緩沖區的保留時間,10g版本新增自動檢查點,初始化參數fast_start_mttr_target未設置值時,oracle能夠自動調整檢查點的執行時間

      Ckpt主要完成以下工作

            更新控制文件,並修改數據文件的頭信息,記錄當前檢查點的位置

            dbwr進程發布將臟塊寫入到數據文件的任務,保證數據庫的一致性,

 

smon 系統監控

pmon 進程監控

arch 歸檔進程:歸檔模式下才有該進程,負責將寫滿的重做日志文件保存到相應的歸檔路徑,(Log_archive_dest_n參數指定的路徑下),當對日志文件進行歸檔時,其他進程均無法訪問該文件,一個實例最多運行10個archn進程,默認1個,初始化參數log_archive_max_process,

Jnnn 任務隊列job

 

Log Writer (LGWR)   

LGWR performs sequential writes from the Redo Log Buffer to the online redo log file under the followingsituations:   
     1.When a transaction commits   
     2.When the Redo Log Buffer is one-third full  
     3.When there is more than 1 MB of changes recorded in the Redo Log Buffer   
     4.Before DBWn writes modified blocks in the Database Buffer Cache to the data files   
     5.Every three seconds   
    
.Because the redo is needed for recovery, LGWR confirms the commit operation only after the redo is written todisk.   
LGWR can also call on DBWn to write to the data files. 

Database Writer (DBWn)   

The server process records changes to undo and data blocks in the Database Buffer Cache. DBWn writes thedirty buffers from the Database Buffer Cache to the data files. It ensures that a sufficient number of free buffers(buffers that can be overwritten when server processes need to read in blocks from the data files) are availablein the Database Buffer Cache. Database performance is improved because server processes make changes onlyin the Database Buffer Cache.   
DBWn defers writing to the data files until one of the following events occurs:   
     Incremental or normal checkpoint  
     The number of dirty buffers reaches a threshold value   
     A process scans a specified number of blocks when scanning for free buffers and cannot find any  
     Timeout occurs   
     A ping request in Real Application Clusters (RAC) environment   
     Placing a normal or temporary tablespace offline   
     Placing a tablespace in read-only mode   
     Dropping or truncating a table  
     ALTER TABLESPACEtablespace nameBEGIN BACKUP   

1. Buffer Cache中的Dirty List長度達到閥值:   
DBWRDirty List中的Dirty Buffer寫入磁盤(user Server ProcessLRU List中查找free buffer時將碰到的dirty blocks移入Dirty List   
  
2. user Server ProcessBuffer CacheLRU List中搜索了過長的時間而仍然沒有找到free buffer   
DBWR直接從LRU List中將Dirty Buffer寫入磁盤   
  
3. 每過3秒鍾:   
DBWRdirty buffersLRU List移到Dirty List,一旦Dirty List長度達到閥值,DBWR便將數據寫入磁盤   
  
4. Checkpoint發生時:   
DBWR把所有的dirty buffersLRU List移到Dirty List,並且開始寫數據   
  
5. Tablespace開始Hot backup時:   
DBWR把所有屬於該表空間的dirty buffersLRU List移到Dirty List,並且開始寫數據   
  
6. Tablespace offline時:   
DBWR把所有屬於該表空間的dirty buffersLRU List移到Dirty List,並且開始寫數據   
  
7. 執行Drop時:   
drop table或者index將促使DBWR先將屬於該segmentdirty blocks寫入磁盤   
  

checkpoint 

checkpoint是一個數據庫事件,它將已修改的數據從高速緩存刷新到磁盤,並更新控制文件和數據文件。   
我們知道了checkpoint會刷新臟數據,但什么時候會發生checkpoint呢?以下幾種情況會觸發checkpoint   
  
1.當發生日志組切換的時候   
2.當符合LOG_CHECKPOINT_TIMEOUTLOG_CHECKPOINT_INTERVALfast_start_io_target,fast_start_mttr_target參數設置的時候   
3.當運行ALTER SYSTEM SWITCH LOGFILE的時候   
4.當運行ALTER SYSTEM CHECKPOINT的時候   
5.當運行alter tablespace XXX begin backupend backup的時候   
6.當運行alter tablespace ,datafile offline的時候;  

 


PMON進程:
       該進程在用戶進程出現故障時執行進程恢復,負責清理內存儲區和釋放該進程所使用的資源。例:它要重置活動事務表的狀態,釋放封鎖,將該故障的進程的ID從活動進程表中移去。PMON還周期地檢查調度進程(DISPATCHER)和服務器進程的狀態,如果已死,則重新啟動(不包括有意刪除的進程)。 
PMON有規律地被呼醒,檢查是否需要,或者其它進程發現需要時可以被調用。 

SMON進程:
        該進程實例啟動時執行實例恢復,還負責清理不再使用的臨時段。在具有並行服務器選項的環境下,SMON對有故障CPU或實例進行實例恢復。SMON進程有規律地被呼醒,檢查是否需要,或者其它進程發現需要時可以被調用。 

DBWR進程:
        該進程執行將緩沖區寫入數據文件,是負責緩沖存儲區管理的一個ORACLE后台進程。當緩沖區中的一緩沖區被修改,它被標志為弄臟DBWR的主要任務是將弄臟的緩沖區寫入磁盤,使緩沖區保持干凈。由於緩沖存儲區的緩沖區填入數據庫或被用戶進程弄臟,未用的緩沖區的數目減少。當未用的緩沖區下降到很少,以致用戶進程要從磁盤讀入塊到內存存儲區時無法找到未用的緩沖區時,DBWR將管理緩沖存儲區,使用戶進程總可得到未用的緩沖區。 ORACLE采用LRULEAST RECENTLY USED)算法(最近最少使用算法)保持內存中的數據塊是最近使用的,使I/O最小。在下列情況預示DBWR 要將弄臟的緩沖區寫入磁盤: 
1、當一個服務器進程將一緩沖區移入弄臟表,該弄臟表達到臨界長度時,該服務進程將通知DBWR進行寫。該臨界長度是為參數DB-BLOCK-WRITE-BATCH的值的一半。 
2、 當一個服務器進程在LRU表中查找DB-BLOCK-MAX-SCAN-CNT緩沖區時,沒有查到未用的緩沖區,它停止查找並通知DBWR進行寫。 
3、出現超時(每次3秒),DBWR 將通知本身。 
4、 當出現檢查點時,LGWR將通知DBWR 在前兩種情況下,DBWR將弄臟表中的塊寫入磁盤,每次可寫的塊數由初始化參數DB-BLOCK-WRITE-BATCH所指定。如果弄臟表中沒有該參數指定塊數的緩沖區,DBWRLUR表中查找另外一個弄臟緩沖區。 如果DBWR在三秒內未活動,則出現超時。在這種情況下DBWRLRU表查找指定數目的緩沖區,將所找到任何弄臟緩沖區寫入磁盤。每當出現超時,DBWR查找一個新的緩沖區組。每次由DBWR查找的緩沖區的數目是為寢化參數DB-BLOCK-WRITE-BATCH的值的二倍。如果數據庫空運轉,DBWR最終將全部緩沖區存儲區寫入磁盤。 在出現檢查點時,LGWR指定一修改緩沖區表必須寫入到磁盤。DBWR將指定的緩沖區寫入磁盤。 在有些平台上,一個實例可有多個DBWR。在這樣的實例中,一些塊可寫入一磁盤,另一些塊可寫入其它磁盤。參數DB-WRITERS控制DBWR進程個數。 

LGWR進程:
           該進程將日志緩沖區寫入磁盤上的一個日志文件,它是負責管理日志緩沖區的一個ORACLE后台進程。LGWR進程將自上次寫入磁盤以來的全部日志項輸出,LGWR輸出: 
1、 當用戶進程提交一事務時寫入一個提交記錄。 
2、每三秒將日志緩沖區輸出。 
3、 當日志緩沖區的1/3已滿時將日志緩沖區輸出。 
4、當DBWR將修改緩沖區寫入磁盤時則將日志緩沖區輸出。 
LGWR進程同步地寫入到活動的鏡象在線日志文件組。如果組中一個文件被刪除或不可用,LGWR 可繼續地寫入該組的其它文件。 日志緩沖區是一個循環緩沖區。當LGWR將日志緩沖區的日志項寫入日志文件后,
服務器進程可將新的日志項寫入到該日志緩沖區。LGWR 通常寫得很快,可確保日志緩沖區總有空間可寫入新的日志項。 
注意:有時候當需要更多的日志緩沖區時,LWGR在一個事務提交前就將日志項寫出,而這些日志項僅當在以后事務提交后才永久化。 ORACLE使用快速提交機制,當用戶發出COMMIT語句時,一個COMMIT記錄立即放入日志緩沖區,但相應的數據緩沖區改變是被延遲,直到在更有效時才將它們寫入數據文件。當一事務提交時,被賦給一個系統修改號(SCN),它同事務日志項一起記錄在日志中。由於SCN記錄在日志中,以致在並行服務器選項配置情況下,恢復操作可以同步。 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM