Oracle體系結構理解(3)
服務器進程與後台進程
服務器進程與後台進程也是兩個不同的概念,服務器進程也叫做前台進程,在oracle服務器中負責與Client端的連接。每當clinet端產生一個用戶進程來連接數據庫,數據庫會產生相應的服務器進程和端口號來與之進行連接,在專用服務器中哦個這是一對一的關系,在共享服務器中則會采用調度器的機制。
後台進程則是實例(instance)的一部分,在實例啟動的時候,SGA被分配,後台進程也被分配,且分配需要使用的內存(PGA),後台進程具體實施oracle服務器中的操作,打個比方的話,類似於工地上干活的工人,分工明確。後台進程僅僅占用PGA很小的一部分,嚴謹的來說PGA在實例啟動的時候就已經分配了一部分了(只不過占比重很小),而其余大部分都是在用戶進行連接的時候進行分配的,因為PGA大部分都分配給進行客戶連接的服務器進程。
後台進程簡單描述
之前已經對後台進程進行了簡單的介紹,接下來對常用的後台進程進行簡單的介紹:
SMON:在實例啟動的時候執行恢復(如果需要),還負責清楚暫時不使用的臨時段。SMON會定期的查看是否需要該進程。其他進程在需要的時候也可以對SMON進行調用。
PMON:在用戶進程失敗時進行進程恢復(在我理解是清除所有該用戶進程的信息):1.清除buffer cache;2.釋放該用戶進程所占用的所有資源。PMON還負責監視是否發生空閒會話超時和將數據庫的服務動態監聽到監聽程序。
PMON會自動的重新啟用任何已經停止運行的分派程序和服務器進程。(主要對服務器進程進行管理)
DBWn:將buffer cache中修改過的數據寫入數據文件。寫入磁盤有兩種方式:1.在執行其他處理的時候異步寫入(先寫一部分)2.定期執行以推進檢查點。
回寫髒塊的操作會在以下情況發生:1.全局檢查點; 2.關閉數據庫; 3.drop表;以及脫機表空間的時候發生。
LGWR:這個進程的作用相對和DBWn進程的作用都相對單一而且易於理解,LGWR是將redo log buffer中的緩存信息寫入redo log file中,LGWR在以下條件中將會被觸發:1.redolog buffer被占用1/3; 2.切換日志文件; 3.每3s; 4.在DBWn將dirty block寫入數據文件之前; 5用戶commit事務處理; 6.redo log buffer占用1M。
CKPT:將檢查點信息寫入控制文件和每個數據文件頭。當系統發起全局檢查點的時候,會通知DBWn將dirty block全部寫回數據文件,這時如果大量累積了dirty block,這對DBWn將會是一個非常大的工作量。為了減少這種工作量和減少實例恢復時所要通過redolog恢復的dirty block的數量以減少實例恢復時間,引入了增量檢查點。
發起增量檢查點僅僅會對控制文件操作,CKPT定期觸發DBWn,CKPT通知DBWn將check point queue中的 dirty block寫回數據文件,減小了DBWn的工作量也提高了io效率。
Oracle體系結構理解(3)
完全檢查點可以通過手動觸發(執行Alter system checkponit;),也會在切換日志,shutdown immediate等條件下觸發。
RECO:用於分布式數據庫的配置。
後台進程還有許多,這裡簡單介紹常用的幾種,很多進程的作用相對復雜,需要更深入的對體系結構進行理解和深入的探索。