oracle體繫結構三部曲之進程結構

來源:互聯網
上載者:User

  與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一起被寫入到聯機重做記錄檔裡。 
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.