【ora10,4】oracle後臺進程介紹:

一.SMON(System MONitor) 系統監控進程:
    

在數據庫啓動過程中,SMON排在CKPT進程之後,在Oracle9i中排在第六號的位置:

PMON started with pid=2
DBW0 started with pid=3
LGWR started with pid=4
CKPT started with pid=5
SMON started with pid=6
RECO started with pid=7

SMON負責系統監視已經一些系統清理及恢復工作,這些工作主要包括:
1.清理臨時空間以及臨時段
SMON負責在數據庫啓動時清理臨時表空間中的臨時段,或者一些異常操作過程遺留下來的臨時段,例如,當創建索引過程中,創建期間分配給索引的Segment被標誌爲TEMPORARY,如果Create Index (或rebuild Index等)會話因某些原因異常中斷,SMON負責清理這些臨時段。
2.接合空閒空間
在DMT(字典管理表空間)中,SMON負責把那些在表空間中空閒的並且互相是鄰近的Extent接合成一個較大的空閒擴展區,這需要表空間的pctincrease設置爲非零值。
3.執行實例恢復(Instance recovery)
在實例恢復過程中,SMON的工作包括三個環節:應用Redo執行前滾、打開數據庫提供訪問、回滾未提交數據

Tue Apr 22 21:31:10 2008
SMON: enabling cache recovery
Tue Apr 22 21:31:10 2008
ARC0: Completed archiving log 1 thread 1 sequence 238
Tue Apr 22 21:31:11 2008
Undo Segment 1 Onlined
Undo Segment 2 Onlined
Undo Segment 3 Onlined
Undo Segment 4 Onlined
Undo Segment 5 Onlined
Undo Segment 6 Onlined
Undo Segment 7 Onlined
Undo Segment 8 Onlined
Undo Segment 9 Onlined
Undo Segment 10 Onlined
Successfully onlined Undo Tablespace 1.
Tue Apr 22 21:31:11 2008
SMON: enabling tx recovery
Tue Apr 22 21:31:11 2008
Database Characterset is ZHS16GBK
replication_dependency_tracking turned off (no async multimaster replication found)
Completed: ALTER DATABASE OPEN

4.離線(Offline)回滾段
在自動回滾段管理(AUM)中負責Offline不再需要的回滾段,日誌中會記錄類似如下信息:

Fri May 2 15:43:21 2008
SMON offlining US=11
SMON offlining US=12
SMON offlining US=13
SMON offlining US=14
SMON offlining US=15
SMON offlining US=16
SMON offlining US=17
SMON offlining US=18
SMON offlining US=19
SMON offlining US=20
SMON offlining US=21
SMON offlining US=22
SMON offlining US=23

5.執行並行恢復
以下信息來自9i日誌:

Fri May 11 21:30:45 2007
SMON: Parallel transaction recovery tried


Also Record some English Note About SMON:

The SMON background process performs all system monitoring functions on the Oracle database. The SMON process performs a "warm start" each time that Oracle is re-started, ensuring that any in-flight transaction at the time of the last shutdown are recovered. For example, if Oracle crashed hard with a power failure, the SMON process is attached at startup time, and detects any uncompleted work, using the rollback segments to recover the transactions. In addition, SMON performs periodic cleanup of temporary segments that are no longer needed, and also perform tablespace operations, coalescing contiguous free extents into larger extents.  
 6.維護SMON_SCN_TIME 系統表。SMON_SCN_TIME 表記錄了SCN 與時間的對應關係,由SMON 定期進行定新,並將一些較老的數據定期刪除。
二. PMON (Process MONitor) 進程監控進程:
 
1.作用:     
主要用於回滾異常終止的或被用戶強制終止的事務.
<1>.rolling back the transaction.
<2>.releasing locks.釋放鎖.
<3>.releasing other resources.
<4>.restarts dead dispatchers.重啓死掉的調度器.(在共享服務器中用).

<5>.作爲實例第一個啓動的後臺進程,PMON 還肩負監控其他Oracle 後臺進程的職責,在必要時重啓這些後臺進程;
<6>.此外,PMON 還負責向TNS 監聽器註冊實例。
 
三.DBWn  數據庫寫進程:
1.作用:將內存中的數據寫入到磁盤。
2.DBWR寫的條件:
            發生檢查點,
            髒緩存到達限制。
            沒有自由的緩存
            超時發生。
            RAC ping請求
            表空間離線
            表空間只讀
            表被刪除或者截斷
            開始備份表空間
下面爲從網上找的與上面的相似:
         
1) 當進程在輔助LRU鏈表和主LRU鏈表上掃描以查找可以覆蓋的buffer header[空閒緩衝區]時,如果已經掃描的buffer header的數量到達一定的限度(由隱藏參數:_db_block_max_scan_pct決定)時,觸發DBWR進程。_db_block_max_scan_pct表示已經掃描的buffer header的個數佔整個LRU鏈表上buffer header總數的百分比。這時,搜索可用buffer header的進程掛起,在v$session_wait中表現爲等待“free buffer wait”事件,同時增加v$sysstat中的“dirty buffers inspected”的值。(can query by x$kvit)
2) 當DBWR在主LRUW鏈表上查找已經更新完而正在等待被寫入數據文件的buffer header時,如果找到的buffer header的數量超過一定限度(由隱藏參數:_db_writer_scan_depth_pct決定)時,DBWR就不再繼續往下掃描了,而轉到輔助LRUW鏈表上將其上的髒數據塊寫入數據文件。_db_writer_scan_depth_pct表示已經掃描的髒數據塊的個數佔整個主LRUW鏈表上buffer header總數的百分比。
3) 如果主LRUW鏈表和輔助LRUW鏈表上的髒數據塊的總數超過一定限度,也將觸發DBWR進程。該限度由隱藏參數:_db_large_dirty_queue決定。
4) 發生增量檢查點(incremental checkpoint)或完全檢查點(complete checkpoint)時觸發DBWR。
5) 每隔三秒鐘啓動一次DBWR。
6) 將表空間設置爲離線(offline)狀態時觸發DBWR。
7) 發出命令:alter tablespace … begin backup,從而將表空間設置爲熱備份狀態時觸發DBWR。
8) 將表空間設置爲只讀狀態時,觸發DBWR。
9) 刪除對象時(比如刪除某個表)會觸發DBWR。
 
3. 系統有多少個數據庫寫進程:
    32位系統,最多有10個進程,名稱從dbw0----dbw9
    64位系統,最多有20個進程,名稱從dbw0----dbw9 ,dbwa  -----dbwj.
4.查看dbwr進程數據量:
SQL> show parameter db_writer_processes

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_writer_processes                  integer     1
一般情況下dbwr進程數量設置爲: dbwr進程數量大小 = cup數量 /8; 
 
 
四. 日誌寫進程LGWR
 
1.LGWR寫的條件:
    提交的時候,
    達到日誌緩存區的三分之一的時候,
    日誌的大小到1M
    每個三秒
    在DBWn進程寫之前。
下面爲從網上找的與上面的相似:    
1)超時(timeout)
當LGWR處於空閒狀態時,它依賴於rdbms ipc message等待,處於休眠狀態,直到3秒超時時間到。
如果LGWR發現有redo需要寫出,那麼LGWR將執行寫出操作,log file parallel write等待事件將會出現。
 
2)閾值達到
只要一個進程在log buffer中分配空間,已經使用的Log buffer的數量將被計算。如果使用的塊的
數量大於或等於_log_io_size參數設置,那麼將會觸發LGWR寫操作。
如果此時LGWR未處於活動狀態,那麼LGWR將被通知去執行後臺寫操作。
缺省的_log_io_size等於1/3 log buffer大小,上限值爲1M,此參數在X$KSPPSV中顯示的0值,意爲缺省值。
也就是,LGWR將在Min(1M,1/3 log buffer size)時觸發。注意此處的log buffer size是以log block來衡量的。
此值通常爲512 bytes.
 
3)提交
當一個事物提交時,在redo stream中將記錄一個提交標誌。
在這些redo被寫到磁盤上之前,這個事物是不可恢復的。所以,在事務返回成功標誌給用戶前,必須等待LGWR寫完成。進程通知LGWR寫,並且以log file sync事件開始休眠,超時時間爲1秒。
Oracle的隱含參數_wait_for_sync參數可以設置爲false避免redo file sync的等待,但是就將無法保證事務的恢復性.注意,在遞歸調用(recursive calls)中的提交(比如過程中的提交)不需要同步redo直到需要返回響應給用戶。因此遞歸調用僅需要同步返回給用戶調用之前的最後一次Commit操作的RBA。
 
存在一個SGA變量用以記錄redo線程需要同步的log block number。
如果多個提交在喚醒LGWR之前發生,此變量記錄最高的log block number,在此之前的所有redo都將被寫入磁盤。
這有時候被稱爲組提交(group commit).
4)在DBWR寫之前
如果DBWR將要寫出的數據的高RBA超過LGWR的on-Disk RBA,DBWR將post LGWR去執行寫出。
在Oracle8i之前,此時DBWR將等待log file sync事件。
從Oracle8i開始,DBWR把這些Block放入一個defer隊列,同時通知LGWR執行redo寫出,DBWR可以繼續執行無需等待的數據寫出。
2.log buffer 日誌緩衝區,通過lgwr 寫到logfile文件中
 
五. CKPT (Checkpoint) 檢查點進程:
    1.作用:
                它負責更新控制文件和數據文件頭的檢查點信息,CKPT 進程還會通知DBWn 進程去執行寫操作。檢查點信息包括檢查點位置、SCN 、Redo的恢復位置等。
        給DBWn發信號,DBWn改寫數據。
        更新數據文件頭
        更新控制文件
 
    2.CKPT發送CHECKPOINT信號的觸發條件:
1)log_checkpoint_timeout時間達到
2)當前redo日誌已經寫夠log_checkpoint_internavl*操作系統塊大小
3)redo log switch
4)alter system checkpoint
5)alter tablespace XXX begin backup/end backup的時候
6)alter tablespace ,datafile offline,shutdown immediate,direct read的時候;
六.歸檔日誌進程 Archiver (ARCn)
1.作用:
在Oracle可選的後臺進程中,最重要的就是歸檔日誌進程。如果Oracle數據庫發生數據文件丟失或者損壞,需要進行完全恢復時,都應該運行在歸檔模式下。
在Oracle中,重做日誌文件被分爲很多組。當一組重做日誌文件被寫滿後,就開始寫下一組,稱爲日誌切換。日誌切換以循環方式進行,當最後一組寫滿後,又開始寫第一組。如果Oracle運行在非歸檔模式下,就會發生重做日誌文件覆蓋的問題。
在歸檔模式下,ARCn進行將把切換後的重做日誌文件複製到歸檔日誌文件。Oracle保證在一組重做日誌的歸檔完成之前不會覆蓋此組重做日誌文件
 
 
2.顯示歸檔進程有多少個
SQL> show parameter log_archive_max_processes
 
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------
log_archive_max_processes            integer     4
 
3.修改歸檔進程個數:
 
SQL> alter system set log_archive_max_processes=5;
 
系統已更改。



6. RECO進程
       負責在分佈式數據庫環境中自動恢復那些失敗的分佈式事務,保證分佈式事務的一致性,在分佈式事務中,要麼同時commit,要麼同時rollback;
 
7. ARCH進程
       該進程將已填滿的在線日誌文件拷貝到指定的存儲設備。當數據庫運行在歸檔模式下,歸檔進程負責在日誌切換後將已經寫滿的重做日誌文件複製到歸檔目標.

8. LCKn進程
       是在具有並行服務器選件環境下使用,可多至10個進程(LCK0,LCK1……,LCK9),用於實例間的封鎖。
 
9. MMAN 進程
       內存管理,如果設定了 SGA自動管理,MMAN用來協調SGA內各組件的大小設置和大小調整。
 
10. MMON 進程
       管理性監視器(Manageability Monitor),MMON主要用於AWR,ADDM。MMON會從SGA將統計結果寫到系統表中。
        MMON: The Manageability Monitor (MMON) process was introduced in 10g and is associated with the Automatic Workload Repository new features used for automatic problem detection and self-tuning. MMON writes out the required statistics for AWR on a scheduled basis.

七.虛擬時鐘進程:(oracle 11g 新增加)

VKTM  –   其全名爲V irtual  Keeper of TiMe  –   虛擬時鐘進程,這個進程是在Oracle  Database 
11g 中引入的進程,用 於 ᨀ 供 一 個 數 據 庫 內 部 的 虛 擬 時 鍾 ,以計算各種時間間隔量度等,VKTM
的引入降低和操作系統之間的交互,從而ᨀ高了性能。 
    VKTM 有兩種運行模式: 
•   基礎模式,秒級間隔更新; 
•   或者作爲參考時間計數器,這種方式每20毫秒更新一次,僅在高優先級時可用。 
對於不同的版本,VKTM 的設定模式可能不同,具體可以從告警日誌文件中查知。


八. v$PROCESS 視圖:
通過數據庫中的v$process視圖,可以找到對應於操作系統的每個進程信息:

SQL> select addr, pid ,spid ,username, program from v$process;

ADDR            PID SPID         USERNAME        PROGRAM
-------- ---------- ------------ --------------- -------------------------
2C61627C          1                              PSEUDO
2C616830          2 5074         oracle          oracle@master (PMON)
2C616DE4          3 5078         oracle          oracle@master (PSP0)
2C617398          4 5080         oracle          oracle@master (MMAN)
2C61794C          5 5082         oracle          oracle@master (DBW0)
2C617F00          6 5084         oracle          oracle@master (LGWR)
2C6184B4          7 5086         oracle          oracle@master (CKPT)
2C618A68          8 5088         oracle          oracle@master (SMON)
2C61901C          9 5090         oracle          oracle@master (RECO)
2C6195D0         10 5092         oracle          oracle@master (CJQ0)
2C619B84         11 5094         oracle          oracle@master (MMON)

ADDR            PID SPID         USERNAME        PROGRAM
-------- ---------- ------------ --------------- -------------------------
2C61A138         12 5096         oracle          oracle@master (MMNL)
2C61A6EC         13 5098         oracle          oracle@master (D000)
2C61ACA0         14 5100         oracle          oracle@master (D001)
2C61B254         15 5102         oracle          oracle@master (S000)
2C61B808         16 5104         oracle          oracle@master (TNS V1-V3)


在v$process的查詢輸出中,SPID列代表的就是操作系統上的進程號,通過SPID可以將
進程從操作系統到數據庫關聯起來:
九.查找後臺進程:
 
SQL> select * from v$bgprocess where paddr<>'00';
 
 
 
 
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章