国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

進程結構和內存結構的實例

2024-07-21 02:13:15
字體:
來源:轉載
供稿:網友

1. oracle實例的進程結構和內存結構

1) 進程結構

進程是操作系統中的一種機制,它可執行一系列的操作步。在有些操作系統中使用作業(job)或任務(task)的術語。一個進程通常有它自己的專用存儲區。oracle進程的體系結構設計使性能最大。

oracle實例有兩種類型:單進程實例和多進程實例。

單進程oracle(又稱單用戶oracle)是一種數據庫系統,一個進程執行全部oracle代碼。由于oracle部分和客戶應用程序不能分別以進程執行,所以oracle的代碼和用戶的數據庫應用是單個進程執行。

在單進程環境下的oracle 實例,僅允許一個用戶可存取。例如在ms-dos上運行oracle 。

多進程oracle實例(又稱多用戶oracle)使用多個進程來執行oracle的不同部分,對于每一個連接的用戶都有一個進程。

在多進程系統中,進程分為兩類:用戶進程和oracle進程。當一用戶運行一應用程序,如pro*c程序或一個oracle工具(如sql*plus),為用戶運行的應用建立一個用戶進程。oracle進程又分為兩類:服務器進程和后臺進程。服務器進程用于處理連接到該實例的用戶進程的請求。當應用和oracele是在同一臺機器上運行,

而不再通過網絡,一般將用戶進程和它相應的服務器進程組合成單個的進程,可降低系統開銷。然而,當應用和oracle運行在不同的機器上時,用戶進程經過一個分離服務器進程與oracle通信。它可執行下列任務:

對應用所發出的sql語句進行語法分析和執行。

從磁盤(數據文件)中讀入必要的數據塊到sga的共享數據庫緩沖區(該塊不在緩沖區時)。

將結果返回給應用程序處理。

系統為了使性能最好和協調多個用戶,在多進程系統中使用一些附加進程,稱為后臺進程。在許多操作系統中,后臺進程是在實例啟動時自動地建立。一個orac

le實例可以有許多后臺進程,但它們不是一直存在。后臺進程的名字為:

dbwr 數據庫寫入程序

lgwr 日志寫入程序

ckpt 檢查點

smon 系統監控

pmon 進程監控

arch 歸檔

reco 恢復

lckn 封鎖

dnnn 調度進程

snnn 服務器

每個后臺進程與oracle數據庫的不同部分交互。

下面對后臺進程的功能作簡單介紹:

dbwr進程:該進程執行將緩沖區寫入數據文件,是負責緩沖存儲區管理的一個oracle后臺進程。當緩沖區中的一緩沖區被修改,它被標志為“弄臟”,dbwr的主要任務是將“弄臟”的緩沖區寫入磁盤,使緩沖區保持“干凈”。由于緩沖存儲區的緩沖區填入數據庫或被用戶進程弄臟,未用的緩沖區的數目減少。當未用的緩沖區下降到很少,以致用戶進程要從磁盤讀入塊到內存存儲區時無法找到未用

的緩沖區時,dbwr將管理緩沖存儲區,使用戶進程總可得到未用的緩沖區。

oracle采用lru(least recently used)算法(最近最少使用算法)保持內存中的數據塊是最近使用的,使i/o最小。在下列情況預示dbwr 要將弄臟的緩沖區寫入磁盤:

當一個服務器進程將一緩沖區移入“弄臟”表,該弄臟表達到臨界長度時,該服務進程將通知dbwr進行寫。該臨界長度是為參數db-block-write-batch

的值的一半。

當一個服務器進程在lru表中查找db-block-max-scan-cnt緩沖區時,沒有查到未用的緩沖區,它停止查找并通知dbwr進行寫。

出現超時(每次3秒),dbwr 將通知本身。

當出現檢查點時,lgwr將通知dbwr在前兩種情況下,dbwr將弄臟表中的塊寫入磁盤,每次可寫的塊數由初始化參數db-block-write-batch所指定。如果弄臟表中沒有該參數指定塊數的緩沖區,db

wr從lur表中查找另外一個弄臟緩沖區。

如果dbwr在三秒內未活動,則出現超時。在這種情況下dbwr對lru表查找指定數目的緩沖區,將所找到任何弄臟緩沖區寫入磁盤。每當出現超時,dbwr查找一個新的緩沖區組。每次由dbwr查找的緩沖區的數目是為寢化參數db-block-write-batch的值的二倍。如果數據庫空運轉,dbwr最終將全部緩沖區存儲區寫入磁盤。在出現檢查點時,lgwr指定一修改緩沖區表必須寫入到磁盤。dbwr將指定的緩沖

區寫入磁盤。

在有些平臺上,一個實例可有多個dbwr。在這樣的實例中,一些塊可寫入一磁盤,另一些塊可寫入其它磁盤。參數db-writers控制dbwr進程個數。

lgwr進程:該進程將日志緩沖區寫入磁盤上的一個日志文件,它是負責管理日志緩沖區的一個oracle后臺進程。lgwr進程將自上次寫入磁盤以來的全部日志項輸出,lgwr輸出:

當用戶進程提交一事務時寫入一個提交記錄。

每三秒將日志緩沖區輸出。

當日志緩沖區的1/3已滿時將日志緩沖區輸出。

當dbwr將修改緩沖區寫入磁盤時則將日志緩沖區輸出。

lgwr進程同步地寫入到活動的鏡象在線日志文件組。如果組中一個文件被刪除或不可用,lgwr 可繼續地寫入該組的其它文件。

日志緩沖區是一個循環緩沖區。當lgwr將日志緩沖區的日志項寫入日志文件后,

服務器進程可將新的日志項寫入到該日志緩沖區。lgwr 通常寫得很快,可確保日志緩沖區總有空間可寫入新的日志項。

注意:有時候當需要更多的日志緩沖區時,lwgr在一個事務提交前就將日志項寫出,而這些日志項僅當在以后事務提交后才永久化。

oracle使用快速提交機制,當用戶發出commit語句時,一個commit記錄立即放入日志緩沖區,但相應的數據緩沖區改變是被延遲,直到在更有效時才將它們寫入數據文件。當一事務提交時,被賦給一個系統修改號(scn),它同事務日志項一起記錄在日志中。由于scn記錄在日志中,以致在并行服務器選項配置情況下,恢復操作可以同步。

ckpt進程:該進程在檢查點出現時,對全部數據文件的標題進行修改,指示該檢查點。在通常的情況下,該任務由lgwr執行。然而,如果檢查點明顯地降低系統性能時,可使ckpt進程運行,將原來由lgwr進程執行的檢查點的工作分離出來,

由ckpt進程實現。對于許多應用情況,ckpt進程是不必要的。只有當數據庫有許多數據文件,lgwr在檢查點時明顯地降低性能才使ckpt運行。ckpt進程不將塊寫入磁盤,該工作是由dbwr完成的。

初始化參數checkpoint-process控制ckpt進程的使能或使不能。缺省時為false,

即為使不能。

smon進程:該進程實例啟動時執行實例恢復,還負責清理不再使用的臨時段。在具有并行服務器選項的環境下,smon對有故障cpu或實例進行實例恢復。smon進程有規律地被呼醒,檢查是否需要,或者其它進程發現需要時可以被調用。

pmon進程:該進程在用戶進程出現故障時執行進程恢復,負責清理內存儲區和釋放該進程所使用的資源。例:它要重置活動事務表的狀態,釋放封鎖,將該故障的進程的id從活動進程表中移去。pmon還周期地檢查調度進程(dispatcher)和服務器進程的狀態,如果已死,則重新啟動(不包括有意刪除的進程)。

pmon有規律地被呼醒,檢查是否需要,或者其它進程發現需要時可以被調用。

reco進程:該進程是在具有分布式選項時所使用的一個進程,自動地解決在分布式事務中的故障。一個結點reco后臺進程自動地連接到包含有懸而未決的分布式事務的其它數據庫中,reco自動地解決所有的懸而不決的事務。任何相應于已處理的懸而不決的事務的行將從每一個數據庫的懸掛事務表中刪去。

當一數據庫服務器的reco后臺進程試圖建立同一遠程服務器的通信,如果遠程服務器是不可用或者網絡連接不能建立時,reco自動地在一個時間間隔之后再次連接。

reco后臺進程僅當在允許分布式事務的系統中出現,而且distributed – trans

actions參數是大于0。

arch進程:該進程將已填滿的在線日志文件拷貝到指定的存儲設備。當日志是為archivelog使用方式、并可自動地歸檔時arch進程才存在。

lckn進程:是在具有并行服務器選件環境下使用,可多至10個進程(lck0,lck1……,lck9),用于實例間的封鎖。

dnnn進程(調度進程):該進程允許用戶進程共享有限的服務器進程(server process)。沒有調度進程時,每個用戶進程需要一個專用服務進程(dedicatedserver process)。對于多線索服務器(multi-threaded server)可支持多個用戶進程。如果在系統中具有大量用戶,多線索服務器可支持大量用戶,尤其在客戶_服務器環境中。

在一個數據庫實例中可建立多個調度進程。對每種網絡協議至少建立一個調度進程。數據庫管理員根據操作系統中每個進程可連接數目的限制決定啟動的調度程序的最優數,在實例運行時可增加或刪除調度進程。多線索服務器需要sql*net版本2或更后的版本。在多線索服務器的配置下,一個網絡接收器進程等待客戶應用連接請求,并將每一個發送到一個調度進程。如果不能將客戶應用連接到一調度

進程時,網絡接收器進程將啟動一個專用服務器進程。該網絡接收器進程不是oracle實例的組成部分,它是處理與oracle有關的網絡進程的組成部分。在實例啟動時,該網絡接收器被打開,為用戶連接到oracle建立一通信路徑,然后每一個調度進程把連接請求的調度進程的地址給予于它的接收器。當一個用戶進程作連接請求時,網絡接收器進程分析請求并決定該用戶是否可使用一調度進程。如果是,該網絡接收器進程返回該調度進程的地址,之后用戶進程直接連接到該調度進程。有些用戶進程不能調度進程通信(如果使用sql*net以前的版本的用戶),網絡接收器進程不能將如此用戶連接到一調度進程。在這種情況下,網絡接收器建立一個專用服務器進程,建立一種合適的連接。

2)、oracle內存結構

oracle在內存存儲下列信息:

執行的程序代碼。

連接的會話信息

程序執行期間所需數據和共享的信息

存儲在外存儲上的緩沖信息。

oracle具有下列基本的內存結構:

軟件代碼區

系統全局區,包括數據庫緩沖存儲區、日志緩沖區和共享池.

程序全局區,包括棧區和數據區.

排序區

軟件代碼區

用于存儲正在執行的或可以執行的程序代碼。

軟件區是只讀,可安裝成共享或非共享。oracle系統程序是可共享的,以致多個oracle用戶可存取它,而不需要在內存有多個副本。用戶程序可以共享也可以不共享。

系統全局區

為一組由oracle分配的共享的內存結構,可包含一個數據庫實例的數據或控制信息。如果多個用戶同時連接到同一實例時,在實例的sga中數據可為多個用戶所共享,所以又稱為共享全局區。當實例起動時,sga的存儲自動地被分配;當實例關閉時,該存儲被回收。所有連接到多進程數據庫實例的全部用戶可自動地被分配;當實例關閉時,該存儲被回收。所有連接到多進程數據庫實例的全部用戶可使

用其sga中的信息,但僅僅有幾個進程可寫入信息。在sga中存儲信息將內存劃分成幾個區:數據庫緩沖存儲區、日志緩沖區、共享池、請求和響應隊列、數據字典存儲區和其它各種信息。

程序全局區

pga是一個內存區,包含單個進程的數據和控制信息,所以又稱為進程全局區(p

rocess global area)。

排序區

排序需要內存空間,oracle利用該內存排序數據,這部分空間稱為排序區。排序區存在于請求排序的用戶進程的內存中,該空間的大小為適就排序數據量的大小,可增長,但受初始化參數sort-area-sizer所限制。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 望都县| 溧水县| 盘山县| 扶沟县| 廊坊市| 嘉义市| 乌苏市| 东平县| 株洲县| 赫章县| 元阳县| 黎川县| 饶河县| 两当县| 通州区| 吴川市| 盖州市| 襄樊市| 绵竹市| 于田县| 黄梅县| 马龙县| 依安县| 梨树县| 广饶县| 普兰店市| 兴义市| 望城县| 兴城市| 永靖县| 平南县| 沙坪坝区| 岳池县| 民县| 资溪县| 兴业县| 那曲县| 乐至县| 竹山县| 南皮县| 绥江县|