oracle 後臺程式的理解筆記
PMON
PMON,程式監視。PMON主要有3個用途:
1,在程式非正常中斷後,做清理工作。例如:dedicated server失敗了或者因為一些原因被殺死,這是PMON的工作分兩種。第一,是對dedicated server所做的工作進行恢復或撤銷。第二:是釋放dedicated server佔用的資源。PMON會把失敗程式的未提交的工作進行rollback,釋放鎖,釋放SGA空間
2,在程式abort後,PMON進行清理工作。PMON會監視oracle其他的後臺程式,並在需要的時候對它們進行重建。如果shared server或者dispatcher失敗後,PMON會介入其中,並在清理完失敗程式後,重建一個shared server或dispatcher。例如:在資料庫進行寫日誌的時候LGWR程式失敗,這是個很嚴重的錯誤。解決這種問題最安全的方法是立即中斷例項,並恢復。
3,PMON的第三個用途是,向Oracle TNS listener註冊例項資訊。在例項啟動的時候,PMON會查詢oracle的預設埠(1521埠)是否處於工作狀態。如果這個埠已經處於工作狀態,那麼該例項就可以啟動,PMON把例項的相關資訊告訴listener,包括服務名、例項的資訊等。如果listener沒有啟動,PMON就會定期的嘗試去連線listener。這裡要注意如果oracle沒有是預設的1521埠,而是使用其他的埠時,PMON和listener的連線過程和使用1521埠還是很相似的,除了,在使用非預設埠時,listener的地址要在引數LOCAL_LISTENER中指定。
SMON
SMON,系統監視。SMON的工作如下:
1,清理臨時空間。
2,聚合空閒空間。如果使用dictionary-managed 方式來管理表空間,SMON就要負責把空閒的extent聚合成大的空閒extent。這種情況只有在表空間的管理方式是dictionary-managed ,且引數PCTINCREASE被設定成非零值的時候才會發生。
3,對不可用檔案的事務恢復。在資料庫啟動的時候,SMON會恢復失敗的事務,這些事務是在例項恢復或crash恢復的時候被跳過的。例如:在磁碟上某哥檔案不可用了,在這個檔案又重新可用後,SMON會恢復它。
4,在RAC的單節點故障上進行例項恢復。在RAC 環境下,如果cluster(簇群)中有一個例項失敗了(如:例項所在的機器掛掉了),在這個cluster上的其他的節點會開啟失敗例項的redo log,並恢復失敗例項
5,清理OBJ$。OBJ$是個低階別的資料字典,它幾乎包含了資料庫中所有的objects的entry。多數時候,有的entries的objects已經被刪除了,或者當前的entry代表的不再是最新的objects。SMON就負責刪除這些entry資訊了
6,收縮undo segments。SMON會自動把rollback segment收縮到最優的大小
7,離線rollback segments。DBA可能需要把一個處於active狀態的事務的rollback segment離線。此時如果事務正在使用這個已經離線的rollback segment,那麼這個segment並未真的離線,而是被標記為“pending offline"。在後臺,SMON會一直嘗試離線這個segment,直到成功。
此外,SMON還會重新整理檢視DBA_TAB_MONITORING的統計資訊等。SMON會消耗大量的CPU。SMON會定期地,或被其他後臺程式喚醒,來執行清理工作。
CKPT
CKPT,檢查點程式。CKPT程式並不像它的名字說的那樣進行checkpoint,執行checkpoint是DBWn的工作。它只是來更新資料檔案頭的。oracle8.0之前,CKPT只是一個可選的程式。但oracle8.0之後,CKPT程式就程式被開啟。過去更新資料檔案頭的checkpoint 資訊是LGWR的工作,然而,隨著資料庫檔案的增加,LGWR的負擔也變得越來越重。如果LGWR要更新100,甚至1000哥檔案頭,那麼就會有很多的session等待很長時間去commit。所有CKPT就把這個工作承擔下來了
DBWn
DBWn,資料寫程式。DBWn負責把緩衝區的髒資料寫到磁碟上。在oracle發生switch log files的時候,會發生checkpoint。checkpoint發生後,在redo log中的資料就可以被覆蓋了。如果在redo log被填滿,且要重新利用redo log 來存放新的資料時,而此時checkpoint還為完成,oracle就會返回”checkpoint not complete“。
DBWn的效能相當重要。如果DBWn寫資料的速度不夠快,這樣釋放出空閒buffer的速度也就不會快。那麼Free Buffer Waits 和Write Complete Waits的值就會很快的增長。
oracle可以配置多達36個DBW程式。從DBW0到DBW35.多數系統只有一個DBW程式,但在多CPU系統中就可能不止一個DBW程式了。這樣做的目的是分散寫資料的負擔,保證SGA中有足夠的空閒空間。
最佳化情況下,DBW是透過非同步(asynchronous)I/O向磁碟寫資料的。透過非同步I/O,DBW先把blocks組成一個batch(一捆),再把batch遞交給OS,DBW不會等待OS把batch寫入到磁碟,而是返回,繼續收集下一個batch。當OS完成寫後,會非同步通知DBW程式,已經把batch成功的寫入到磁碟了。
最後,DBW程式是分散地把資料寫到磁碟上的。而LGWR是連續寫redo log。分散寫要比連續寫耗時的多。但是,DBW是在後臺進行分散寫的,而LGWR做連續寫是為了減少使用者等待的時間。
疑問:TOM說DBWn是把blocks組成一個batch,然後非同步交給OS,讓OS寫到磁碟的。為啥又說DBWn是分散寫資料的,寫資料的活不是OS乾的嗎?
LGWR
LGWR,日誌寫程式。LGWR是把SGA中redo log buffer的資訊寫到redo log file的程式。LGWR會在下面情況發生:
1,每個3秒鐘,進行一次LGWR
2,任何事務進行了commit
3,當redo log buffer是1/3滿,或者裡面有1MB的資料
基於以上的原因,把redo log buffer設定的很大就沒必要的。
ARCn
ARCn,歸檔程式。ARCn的工作是在LGWR把onlone redo log填滿後,ARCn把redo log file的內容copy到其他的地方。歸檔日誌可以用來做media recovery。online redo log 是被用來為例項失敗的時候,恢復資料檔案。而歸檔日誌是被用來在media recovery的時候,恢復資料檔案。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8568259/viewspace-2112909/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 9i筆記-後臺程式筆記
- Java後臺筆記Java筆記
- ORACLE後臺程式Oracle
- oracle 後臺程式Oracle
- WINDOWS ORACLE 後臺程式WindowsOracle
- Oracle後臺程式列表Oracle
- 「理解Unix程式」讀書筆記筆記
- oracle中容易忽略的後臺程式Oracle
- Oracle後臺程式的功能簡介Oracle
- Oracle 10g 的後臺程式Oracle 10g
- Oracle 後臺程式 說明Oracle
- Oracle後臺程式詳述Oracle
- [zt] Oracle RAC 後臺程式Oracle
- 筆記:前端與後臺互動筆記前端
- ORACLE 11G 新的後臺程式Oracle
- 關於Oracle RAC後臺程式Oracle
- Oracle RAC後臺程式介紹Oracle
- Oracle VKRM 後臺程式介紹Oracle
- ORACLE 10G 後臺程式Oracle 10g
- oracle架構之後臺程式Oracle架構
- ORACLE學習幾個重要的後臺程式Oracle
- 在windows下檢視oracle的後臺程式WindowsOracle
- Oracle體系結構之-Oracle後臺程式Oracle
- 實驗,暫停oracle後臺程式Oracle
- Oracle後臺程式及其作用簡介Oracle
- ORACLE DG之後臺程式詳解Oracle
- [zt] Oracle10g 後臺程式Oracle
- 【ORACLE】orcle10g後臺程式Oracle
- Expert one on one oracle之後臺程式Oracle
- rac讀書札記---後臺程式
- Oracle程式結構及後臺程式簡介Oracle
- Dubbo學習筆記(二) Dubbo 控制後臺的安裝筆記
- Laravel 快速構建後臺 package Voyager 使用筆記LaravelPackage筆記
- 繼續瞭解Oracle部分後臺程式Oracle
- 微信小程式+java後端整合筆記微信小程式Java後端筆記
- 將程式在後臺執行和殺掉後臺的程式
- IoC(控制反轉)的理解筆記筆記
- Oracle 11g後臺程式一覽表Oracle