oracle 的伺服器程式(PMON, SMON,CKPT,DBWn,LGWR,ARCn)
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/24742969/viewspace-1614120/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 關於pmon、smon、mman、mmon、mmnl後臺程式的解釋
- Oracle 的Lgwr Worker的工作原理Oracle
- 12C開始oracle實現了SCALABLE LGWR多程式並行寫redo logOracle並行
- 以Lgwr Worker為例,基於Strace 分析 Oracle 資料庫行為的方法Oracle資料庫
- 列印出ckpt裡的所有變數和值變數
- LGWR (ospid: 29534): terminating the instance due to error 4021Error
- 【OCP最新題庫解析(052)--題10】 Which two are true about the Archive (ARCnHive
- Oracle共享伺服器的連線模式Oracle伺服器模式
- 文字檢測模型EAST應用詳解 ckpt pb的tf載入,opencv載入模型ASTOpenCV
- sqlserver建立與Oracle的連結伺服器SQLServerOracle伺服器
- LGWR寫操作會導致效能全域性卡頓案例分析
- LGWR和ARCH下密碼檔案不一致對FAL的影響密碼
- 理解Oracle WebLogic伺服器的關鍵概念(三)ZXOracleWeb伺服器
- 理解Oracle WebLogic伺服器的關鍵概念(二)KJOracleWeb伺服器
- 理解Oracle WebLogic伺服器的關鍵概念(一)XBOracleWeb伺服器
- Oracle PL/SQL程式碼中的註釋OracleSQL
- Oracle:RAC 程式簡介Oracle
- Oracle 服務端程式Oracle服務端
- openPower伺服器安裝Oracle 19c伺服器Oracle
- openPower伺服器搭建Oracle 19c adg伺服器Oracle
- oracle執行java程式碼OracleJava
- Oracle OCP(40):程式結構Oracle
- 伺服器Oracle資料庫損壞修復伺服器Oracle資料庫
- 客戶端登入Oracle 12.2伺服器報ORA-01017的解惑客戶端Oracle伺服器
- (一):小程式與伺服器的連結伺服器
- 本地顯示Linux伺服器的GUI程式Linux伺服器GUI
- Oracle實時程式通訊(轉)Oracle
- 如何收集Oracle程式中的SQL跟蹤資訊KUOracleSQL
- Oracle資料庫基礎:程式中呼叫sqlplus的方式Oracle資料庫SQL
- Windows server 2016伺服器上安裝oracle資料庫的教程圖解WindowsServer伺服器Oracle資料庫圖解
- Web伺服器、應用程式伺服器、HTTP伺服器區別Web伺服器HTTP
- 雲伺服器linux系統的程式簡介伺服器Linux
- 微信小程式——搭建自己的Https伺服器微信小程式HTTP伺服器
- LGnn 程式介紹(oracle 19c)GNNOracle
- 【DBMS】Oracle DBMS_OUTOUT程式介紹Oracle
- Oracle批次生成Merge指令碼程式Oracle指令碼
- Oracle同一臺伺服器建立多個資料庫Oracle伺服器資料庫
- 4.1.7.2.5 與快速應用程式通知整合的Oracle客戶端Oracle客戶端
- 用AnySQL在沒有oracle客戶端的伺服器上傳送郵件SQLOracle客戶端伺服器