與oracle相關的進程可分:使用者進程和oracle進程。oracle進程可分:伺服器處理序和後台進程。伺服器處理序可分:專用伺服器處理序和共用伺服器處理序。後台進程可分:DBWn,LGWR,CKPT等。
和使用者進程有關的概念是:串連和會話
串連和會話是兩個不同的概念。一條串連上可以建立0個,1個或多個會話,而且各個會話單獨且獨立的。一條串連即一個進程。
在jsp中,我們舉個例子:
一個瀏覽器就是一個串連
你可以串連到www.google.com.cn上開多個會話、做多件事情
比如:
SQL> set autotrace on
SQL> select sid from v$session where username=USER;
SID
----------
146
158
159
以上這條串連上有三個會話。
串連:使用者進程到執行個體之間的一條實體路徑。
會話:執行個體中存在的一個邏輯實體。
所以,物理上是條串連,邏輯上是個會話。
這裡有兩個名字起得不好的命令:
connect:應該是叫建立會話
disconnect:結束所有會話。
用sql*plus,真正要中斷連線的命令是:exit
伺服器處理序就是代表客戶會話完成工作的進程。它們是乾重活的苦命娃,幾乎所有的工作都是由它們來做的,因此佔用系統cpu的時間最多。
1)對sql進行解析和執行
2)如果所需的資料不在sga中,則server process會去磁碟上將其讀到sga的database_buffer_cache中。
3)把結果返回給應用程式
單個會話查詢服務器進程和使用者進程的pid:
SQL> select a.spid "專用伺服器處理序",b.process "客戶進程"
from v$process a,v$session b
where a.addr=b.paddr
and b.sid=(select sid from v$mystat where rownum=1) 2 3 4
5 /
專用伺服器進 客戶進程
------------ ------------
8313 8304
SQL> !ps -p 8313 8304
PID TTY STAT TIME COMMAND
8304 pts/2 S+ 0:00 sqlplus
8313 ? Ss 0:00 oracleorcl (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL
後台進程都來自同一個二進位可執行程式oracle(/u01/app/oracle/product/10.2.0/db_1/bin/),可以從v$bgprocess查詢.
PMON
1)清理異常串連,如,復原未提交的事務,釋放資源等
2)監視所有oracle進程,如果進程失敗,可能重啟進程,也可能終止執行個體(LGWR失敗)
3)向監聽器註冊這個執行個體並與之通訊。
[復原未提交的事務:oracle server根據server process做動作,server process根據user process做動作。如果user process中斷,server process會出現盲等待。這時,PMON就會檢查有無server process所對應的user process出現中斷,如果有,就復原那筆事務]
SMON
1)執行個體恢複:將online redo log file中保護的資料寫回到資料檔案
2)收集空間:合并空閑空間
CKPT
檢查點進程並不像它的名字所暗示的那樣真的建立檢查點,建立檢查點主要是DBWn的任務。CKPT只是發出要求將database_buffer_cache中的髒塊寫到資料檔案,而響應這個號召的人是DBWn。當DBWn完成了它所建立的檢查點後(這裡的檢查點是指DBWn去檢查某些redo entry是否寫入了online redo log file中,然後再去redo log file保護的資料寫入資料檔案,這整個過程叫檢查點事件),CKPT就會在控制檔案和資料檔案的檔案頭中做記錄。這兩人的關係好比,諸葛亮和關羽,CKPT是諸葛亮,DBWn是關羽,諸葛亮要求攻打祁連山,他發出了這條軍令,那麼關羽就會帶兵去攻打,等佔領了祁連山後,再由諸葛亮做後續的一些工作。
DBWn
DBWn行為是為了釋放緩衝區,或者對日誌過賬。負責保持oracle記憶體資料與磁碟資料的一致性。
為了提高DBWn的寫效能,建議使用支援非同步I/O的平台。採用非同步I/O,DBWn會收集要寫的塊,交給os,但他不會等待os將塊寫到磁碟,而是立馬返回,去收集下一批要寫的塊,當os完成寫操作時,他會非同步通知DBWn。另外,DBWn是分散寫,LGWR是順序寫,分散寫比順序寫慢多了。這也是oracle使用LGWR和重做記錄檔的主要原因。dbwn的數量和cpu的數量通常是一樣的.
LGWR
oracle有個快速提交機制,即:當使用者提交時,redo entry被server process放入redo log buffer,LGWR很快會把這些日誌條目從日誌緩衝區寫到線上重做記錄檔中。但是,被修改的資料並沒有立即寫入磁碟上的資料檔案,而是被延遲了。
當事務提交時,會被賦予一個SCN,它隨著redo entry一起被寫入到聯機重做記錄檔裡。