Decode360's Blog

          業(yè)精于勤而荒于嬉 QQ:150355677 MSN:decode360@hotmail.com

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 ::  :: 管理 ::
            302 隨筆 :: 26 文章 :: 82 評論 :: 0 Trackbacks

          一、數(shù)據(jù)庫的進程

          ?

          ?

          <提示>在Windows中如何查看進程 (10g)
          ??? 打開【配置和移植工具】- Administrator Assistant for Windows
          ??? 找到數(shù)據(jù)庫后點擊右鍵 - 選擇【進程信息】,即可查看。

          ?

          ?

          ?

          ?

          數(shù)據(jù)寫進程DBWR

          ?

          ??? 1、將修改過的數(shù)據(jù)緩沖區(qū)的數(shù)據(jù)寫入對應數(shù)據(jù)文件
          ??? 2、維護系統(tǒng)內(nèi)的空緩沖區(qū)

          ?

          ??? 這里指出幾個容易錯誤的概念:
          ??? 1.當一個更新提交后,DBWR把數(shù)據(jù)寫到磁盤并返回給用戶提交完成×
          ??? 2.DBWR會觸發(fā)CKPT后臺進程×
          ??? 3.DBWR不會觸發(fā)LGWR進程×

          ?

          ??? DBWR是一個很底層的工作進程,他批量的把緩沖區(qū)的數(shù)據(jù)寫入磁盤。和任何前臺用戶的進程幾乎沒有什么關(guān)系,也不受他們的控制。
          ??? DBWR在一下情況下會被觸發(fā)開始工作:
          ??? 1.服務器進程將臟數(shù)據(jù)塊移入DIRTY列表到達其臨界值長度(該長度為DB-BLOCK-WRITE-BATCH的一半)
          ??? 2.服務器進程搜索一定數(shù)量緩存塊后仍未找到可用空閑緩存
          ??? 3.出現(xiàn)超時(約3s內(nèi)未被啟動)
          ??? 4.CKPT進程會通過LGWR通知DBWR進行寫操作

          ?

          ??? DBWR進程若啟動太多頻繁,則將降低系統(tǒng)I/O性能;若太久啟動一次,則對數(shù)據(jù)庫恢復造成一定影響。

          ?

          ?

          日志寫進程LGWR

          ?

          ??? 將重做日志緩沖區(qū)的數(shù)據(jù)寫入重做日志文件。
          ??? LGWR是一個必須和前臺用戶進程通信的進程,當數(shù)據(jù)被修改的時候,系統(tǒng)會產(chǎn)生一個重做日志并記錄在重做日志緩沖區(qū)內(nèi)。這個重做日志可以類似的認為是以下的一個結(jié)構(gòu):

          ?

          SCN=000000001000
          數(shù)據(jù)塊ID
          對象ID=0801
          數(shù)據(jù)行=02
          修改后的數(shù)據(jù)=0011
          ??? 提交的時候,LGWR必須將被修改的數(shù)據(jù)的重做日志緩沖區(qū)內(nèi)數(shù)據(jù)寫入日志數(shù)據(jù)文件,然后再通知前臺進程提交成功,并由前臺進程通知用戶。從這點可以看出LGWR承擔了維護系統(tǒng)數(shù)據(jù)完整性的任務。 ?

          ?

          ??? LGWR在以下情況下觸發(fā)工作:
          ??? 1.用戶提交當前事務
          ??? 2.重做日志緩沖區(qū)被寫滿1/3
          ??? 3.有大于1M 重做日志緩沖區(qū)未被寫入磁盤
          ??? 4.每隔3s發(fā)生一次超時,啟動LGWR
          ??? 5.DBWR需要寫入的數(shù)據(jù)的SCN號大于LGWR記錄的SCN號,DBWR觸發(fā)LGWR寫入

          ?

          ??? 一個LGWR進程可以對多個日志文件組成員操作,以避免某個日志文件損壞的情況下發(fā)生錯誤。
          ??? LGWR切換日志時生成一個檢查點,通知DBWR寫入數(shù)據(jù)。因為即將覆蓋日志文件可能是一個事務修改數(shù)據(jù)留下的日志。

          ?

          ?

          歸檔進程 ARCH ??

          ?

          ??? 當數(shù)據(jù)庫以歸檔方式運行的時候,Oracle會啟動ARCH進程,當重做日志文件被寫滿時,日志文件進行切換,舊的重做日志文件就被ARCH進程復制到一個或多個特定的目錄/ 遠程機器。這些被復制的重做日志文件被叫做歸檔日志文件。

          ??? 要啟動 ARCH 進程,除了數(shù)據(jù)庫要運行在歸檔模式下外,還需要設(shè)置初始化參數(shù) ARCHIVE_LOG_START TRUE ,否則當日志寫滿之后,數(shù)據(jù)庫會被掛起,等待管理員手動歸檔之后重新工作。

          ??? 一個數(shù)據(jù)庫實例可以有多個歸檔進程,其數(shù)量由歸檔進程參數(shù) LOG_ARCHIVE_MAX_PROCESSES 決定。當歸檔進程對日志歸檔時,任何進程無法訪問日志文件,直到歸檔完畢,因此為了加快歸檔速度,可以啟動多個歸檔進程。

          ?

          ?

          檢查點進程CKPT

          ?

          ??? 檢查點進程 CKPT 負責執(zhí)行檢查點,并更新控制文件,啟用 DBWR 進程將臟緩存塊中的數(shù)據(jù)寫入數(shù)據(jù)文件(該任務一般由 LGWR 執(zhí)行)。 CKPT 對于許多應用情況的都不是必須的,只有當數(shù)據(jù)庫數(shù)據(jù)文件很多, LGWR 在檢查點時明顯降低性能的星狂下才使用 CKPT

          ??? CKPT 的作用主要就是:同步數(shù)據(jù)文件、日志文件和控制文件。由于DBWR/LGWR的工作原理,造成了數(shù)據(jù)文件,日志文件,控制文件的不一至,這就需要CKPT進程來同步。CKPT會更新數(shù)據(jù)文件/控制文件的頭信息。

          ?

          ??? 檢查點的執(zhí)行間隔如果設(shè)置過短,則增加磁盤的 I/O 操作,過長則數(shù)據(jù)庫恢復將消耗太多時間。可以根據(jù)以下參數(shù)來設(shè)置檢查點的間隔時間:

          ??? LOG_CHECKPOINT_TIMEOUT :決定執(zhí)行檢查點的時間間隔

          ??? LOG_CHECKPOINT_INTERVAL :設(shè)置每產(chǎn)生多少個日志文件數(shù)據(jù),系統(tǒng)產(chǎn)生一個檢查點

          ?

          ??? CKPT工作的主要條件如下
          ??? 1. 在日志切換的時候
          ??? 2. 數(shù)據(jù)庫用 immediate、transaction、normal 選項 shutdown 數(shù)據(jù)庫時
          ??? 3. 根據(jù)LOG_CHECKPOINT_INTERVAL、LOG_CHECKPOINT_TIMEOUT、FAST_START_IO_TARGET 的設(shè)置值執(zhí)行

          ??? 4. 用戶觸發(fā)

          ?

          ?

          系統(tǒng)監(jiān)控SMON

          ?

          ??? 系統(tǒng)監(jiān)控進程 SMON 在市局哭實例啟動時,負責對數(shù)據(jù)庫進行回復操作。如數(shù)據(jù)庫非正常關(guān)閉,則下次啟動時 SMON 將根據(jù)重做日志文件對數(shù)據(jù)庫進行恢復。 SMON 在實例啟動時執(zhí)行一次,其他時候則在其他進程需要時重新啟動。

          ?

          ??? SMON 的工作主要包含:
          ??? 1. 在系統(tǒng)啟動時,完成系統(tǒng)實例恢復
          ??? 2. 清除臨時空間
          ??? 3. 聚結(jié)空閑空間
          ??? 4. 從不可用的文件中恢復事務的活動
          ??? 5. OPS中失敗節(jié)點的實例恢復
          ??? 6. 清除OBJ$表
          ??? 7. 縮減回滾段
          ??? 8. 使回滾段脫機

          ?

          ?

          進程監(jiān)控PMON

          ?

          ??? 進程監(jiān)控進程 PMON 在用戶進程出現(xiàn)故障時執(zhí)行進程恢復,并負責清理內(nèi)存區(qū)、釋放該進程所使用的資源。例如用戶未從數(shù)據(jù)庫退出的情況下直接關(guān)閉客戶端程序,或由于網(wǎng)絡(luò)中斷而使數(shù)據(jù)庫連接非正常中斷,均會由 PMON 清除失效的用戶進程,釋放用戶進程所用的資源。

          ?

          ??? 此外 PMON 進程還會周期性地檢查調(diào)度程序和服務進程的狀態(tài),如果它們失敗, PMON 將嘗試重啟它們,并釋放資源。例如:PMON將回滾未提交的工作,釋放鎖,釋放分配給失敗進程的SGA資源。

          ?

          ?

          分布式恢復RECO

          ?

          ??? RECO 負責解決分布事物中的故障。

          ??? 在分布式數(shù)據(jù)庫系統(tǒng)中包含了多個數(shù)據(jù)庫實例,他們像一個數(shù)據(jù)庫一樣運行,其中任何一個實例都可以修改其他數(shù)據(jù)庫的數(shù)據(jù)。當由于網(wǎng)絡(luò)問題,有些遠程修改過程處于懸而未決的狀態(tài)。RECO進程會試圖建立與遠程服務器的通信,當故障消除后,RECO進程自動解決所有懸而未決的會話。

          ?

          ?

          用戶進程User Process

          ?

          ??? 在客戶端,負責將用戶的SQL語句傳遞給服務進程,并從服務器段拿回查詢數(shù)據(jù)。

          ?

          ?

          服務進程Server Process

          ?

          ??? 服務進程的分類:
          ??? 1 、專用服務進程(Dedicated Server Process)
          ??????? 此時各個服務進程是完全獨立的,一個服務進程對應一個用戶進程,直到用戶斷開與實例間的連接才會終止。
          ??? 2 、共享服務進程(MultiTreaded Server Process)
          ??????? 一個服務進程對應多個用戶進程,輪流為用戶進程服務。可以用少量服務進程通過調(diào)度進程為任意數(shù)量的用戶進程服務。

          ?

          ?

          調(diào)度進程 Dnnn

          ?

          ??? 調(diào)度進程 Dnnn 是位于用戶進程與共享服務進程之間的關(guān)鍵進程。它負責將用戶進程分配給空閑的服務進程,并將處理后的結(jié)果返回給用戶進程。

          ??? 管理員可根據(jù)情況配置多個調(diào)度程序,其名稱依次為: D000 D111 D222 、……、 Dnnn

          ?

          ?

          ?

          ?

          ?





          -The End-

          posted on 2008-08-21 11:48 decode360-3 閱讀(234) 評論(0)  編輯  收藏 所屬分類: Oracle
          主站蜘蛛池模板: 札达县| 松阳县| 莎车县| 靖安县| 福州市| 威远县| 锡林郭勒盟| 丹凤县| 巨野县| 嘉鱼县| 正安县| 灵寿县| 正定县| 泗洪县| 北辰区| 工布江达县| 延庆县| 青川县| 嘉兴市| 塔河县| 堆龙德庆县| 祁连县| 双牌县| 石楼县| 石阡县| 盘锦市| 新邵县| 宝山区| 尼玛县| 福建省| 荔浦县| 三都| 万年县| 安多县| 永昌县| 佛坪县| 两当县| 高台县| 宁蒗| 平山县| 青龙|