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

首頁(yè) > 數(shù)據(jù)庫(kù) > Oracle > 正文

Oracle9i 數(shù)據(jù)庫(kù)管理實(shí)務(wù)講座(三)-Oracle9i Instance組成與運(yùn)作原理

2024-08-29 13:38:57
字體:
供稿:網(wǎng)友

  作者: 何致億, 美商甲骨文公司臺(tái)灣分公司 特約顧問
  
  前言
  
  前兩期的專欄內(nèi)容已分別為大家介紹了 Oracle9i for linux 的安裝方式,以及Oracle9i 企業(yè)版概觀。但是如何組態(tài)與治理 Oracle9i 數(shù)據(jù)庫(kù)才是我們要討論的重點(diǎn)。本文將深入探討 Oracle9i Instance的組成要素與其運(yùn)作原理,為您揭開 Oracle9i 的神秘面紗。
  
  本文將涵蓋以下主題:
  
      Oracle9i 服務(wù)器架構(gòu)簡(jiǎn)介。
  
      何謂 Oracle9i Instance
  
      系統(tǒng)全域區(qū)
  
      背景處理程序
  在開始任何Oracle9i數(shù)據(jù)庫(kù)治理工作之前,您必須先熟悉 Oracle9i服務(wù)器之整體架構(gòu)及其運(yùn)作原理。所以我先為大家簡(jiǎn)介 Oracle9i 服務(wù)器的基本組成架構(gòu)。
  
  Oracle9i服務(wù)器架構(gòu)
  
  以O(shè)racle9i數(shù)據(jù)庫(kù)系統(tǒng)本身而言,大致上可區(qū)分為兩個(gè)主要部分:
  
      Oracle9i執(zhí)行個(gè)體(Oracle9i Instance)
  
      Oracle9i數(shù)據(jù)庫(kù)檔案(Database files)。
  
  
  
  簡(jiǎn)言之,Oracle9i Instance 是指數(shù)據(jù)庫(kù)服務(wù)器的內(nèi)存與相關(guān)處理程序。您可以想象它就是Oracle9i的心臟。數(shù)據(jù)庫(kù)實(shí)體則由操作系統(tǒng)內(nèi)的各式檔案組成。假如您想深入了解Oracle9i 系統(tǒng)運(yùn)作或從事進(jìn)階的效能調(diào)校,那么一定要搞清楚這兩部分彼此的互動(dòng)關(guān)系才行!Oracle9i服務(wù)器基本架構(gòu)如圖1所示:
   Oracle9i 數(shù)據(jù)庫(kù)治理實(shí)務(wù)講座(三)-Oracle9i Instance組成與運(yùn)作原理(圖一)
點(diǎn)擊查看大圖

  圖1:Oracle9i 服務(wù)器基本架構(gòu)。
  
  
  
  圖1上半部為內(nèi)存內(nèi)Oracle9i Instance,下半部則是位于操作系統(tǒng)的各種數(shù)據(jù)庫(kù)檔案(有關(guān)這些檔案的細(xì)部信息將在下一期說明)。彼此之間是藉由各個(gè)背景處理程序互相溝通。
  
  
  
  接下來我們先討論Oracle9i Instance的組成要素。
  
  
  
  何謂Oracle9i Instance?
  
  第一次接觸Oracle數(shù)據(jù)庫(kù)的使用者經(jīng)常對(duì)「Oracle Instance」這個(gè)名詞感到混淆,因?yàn)镮nstance這個(gè)單字從字典上查到的意義跟數(shù)據(jù)庫(kù)一點(diǎn)關(guān)系也沒有!某些中文書譯者喜歡將Oracle Instance譯為「Oracle實(shí)例」,但是我認(rèn)為這個(gè)譯名十分不恰當(dāng)!我個(gè)人比較傾向稱它為「Oracle執(zhí)行個(gè)體」;俗稱「Oracle數(shù)據(jù)庫(kù)引擎」。既然是數(shù)據(jù)庫(kù)引擎,就表示Oracle數(shù)據(jù)庫(kù)內(nèi)大大小小的事都跟它有關(guān)系,當(dāng)然這也是我們一開始就先討論的主要原因啰。
  
  Oracle9i 執(zhí)行個(gè)體主要是由以下兩項(xiàng)要素組成:
  
  n      系統(tǒng)全域區(qū)(System Global Area)
  
  n      背景處理程序(background PRocesses)
  
  
  
  來看看什么是「系統(tǒng)全域區(qū)」?
  
  系統(tǒng)全域區(qū)
  
  當(dāng)您激活Oracle9i數(shù)據(jù)庫(kù)時(shí),系統(tǒng)會(huì)先在內(nèi)存內(nèi)規(guī)劃一個(gè)固定區(qū)域,用來儲(chǔ)存每位使用者所需存取的資料,以及Oracle9i運(yùn)作時(shí)必備的系統(tǒng)信息。我們稱此區(qū)域?yàn)橄到y(tǒng)全域區(qū)(System Global Area),俗稱SGA (注1) 。
  
  
  
  在 Oracle8i 時(shí),SGA 的大小是由起始參數(shù)檔(initialization parameter file )內(nèi)的某些參數(shù)所設(shè)定。但最麻煩的是每次調(diào)整參數(shù)之后必須等重新激活數(shù)據(jù)庫(kù)才生效(感覺就像在Windows系統(tǒng)修改了一些設(shè)定就要重新開機(jī))。光是數(shù)據(jù)庫(kù)的關(guān)閉與激活就花去不少時(shí)間(難怪大家羨幕 Oracle Consultant 很好賺….., just kidding!! ),何況是執(zhí)行要害性任務(wù)的數(shù)據(jù)庫(kù)哪能一天到晚開來關(guān)去!? 從 Oracle9i 開始,DBA 可以動(dòng)態(tài)配置內(nèi)存的大小;這樣的技術(shù)我們稱為「dynamic SGA」。有了dynamic SGA ,SGA 的各組成區(qū)域都可以動(dòng)態(tài)地進(jìn)行規(guī)劃與調(diào)整,而不需先關(guān)閉數(shù)據(jù)庫(kù)。
  
  Tips: 起始參數(shù)檔(Initialization Parameter file)之意義
  
  如上所述,Oracle Instance被激活時(shí),系統(tǒng)必須藉由某些參數(shù)值來配置適當(dāng)大小的內(nèi)存空間。換言之,我們可以在激活I(lǐng)nstance之前就先規(guī)劃這些參數(shù)的設(shè)定值,并儲(chǔ)存在操作系統(tǒng)下的某個(gè)檔案里。
往后只要利用此檔案就可開啟相對(duì)應(yīng)的Oracle Instance — 我們就將這個(gè)檔案稱之為起始參數(shù)檔。
  
  一般來說,我們還是應(yīng)該在激活 Oracle9i 之前就妥善規(guī)劃好適當(dāng)?shù)膬?nèi)存空間。例如,起始參數(shù)檔的 SGA_MAX_SIZE(注2)可設(shè)定 SGA 所占用的最大內(nèi)存空間。假如考慮 Oracle9i 的執(zhí)行效能,理應(yīng)將此參數(shù)盡可能設(shè)到最大!但有一點(diǎn)需要注重的是:SGA_MAX_SIZE 盡量不要超過物理內(nèi)存大小,否則將會(huì)使用到硬盤上的虛擬內(nèi)存,反而導(dǎo)致效能低落。
  
  
  
  SGA 的大小可由起始參數(shù)檔之特定參數(shù)所控制,表1整理出與SGA相關(guān)的參數(shù)名稱及其意義:
  
   Oracle9i 數(shù)據(jù)庫(kù)治理實(shí)務(wù)講座(三)-Oracle9i Instance組成與運(yùn)作原理(圖二)
  
  注1:在多人使用的環(huán)境下,SGA 的資料可分享給所有同時(shí)上線的聯(lián)機(jī)階段使用,所以 SGA 有時(shí)也稱為 Shared Global Area。
  
  注2:假如 SGA_MAX_SIZE 之設(shè)定值小于其它 SGA 相關(guān)參數(shù)設(shè)定值的總和;或是小于各相關(guān)參數(shù)默認(rèn)值的總和,則 SGA_MAX_SIZE 之設(shè)定值無效。
  
  
  
  如圖1所示,SGA又包含數(shù)個(gè)重要區(qū)域,分別是:
  
  n      Database Buffer Cache (資料快取緩沖區(qū))
  
  n      Redo Log Buffer (重置日志緩沖區(qū))
  
  n      Shared Pool (共享區(qū))
  
  n      其它,如Large pool
  
  
  
  以下是每個(gè)區(qū)域之意義、用途,以及相關(guān)設(shè)定方式。
  
  
  
  資料快取緩沖區(qū)
  
  為SGA 的主要成員,用來存放讀取自數(shù)據(jù)文件的資料區(qū)塊復(fù)本,或是使用者曾經(jīng)處理過的資料。其用途在于有效減少存取資料時(shí)造成的磁盤讀寫動(dòng)作,進(jìn)而提升資料存取之效能。所有同時(shí)上線的使用者都可以共享此緩沖區(qū)的資料。
  
  
  
  整個(gè)資料快取緩沖區(qū)包含兩種緩沖區(qū)串行,分別是 write list 與 LRU list:
  
  n      Write list 存放dirty buffers(注3)之復(fù)本,會(huì)在適當(dāng)時(shí)機(jī)寫入磁盤。
  
  n      LRU list 包含:free buffers,dirty buffers與pinned buffers。其中free buffer 為空白的緩沖區(qū),隨時(shí)可存放資料;pinned buffer則是目前使用中的緩沖區(qū)。
  
  注3: dirty buffer 是存放”已修改,但尚未寫入磁盤的數(shù)據(jù)”之緩沖區(qū)。
  
  
  
  資料快取緩沖區(qū)運(yùn)作原理
  
  當(dāng)使用者第一次向Oracle9i 送出資料查詢請(qǐng)求時(shí),Oracle9i 會(huì)先在資料快取緩沖區(qū)內(nèi)尋找該資料。假如欲查詢的資料恰好已存在于緩沖區(qū)內(nèi)(這樣的情況我們稱之為 cache hit ),就直接從內(nèi)存讀出資料。
  
  
  
  反之,假如緩沖區(qū)內(nèi)并沒有使用者欲查詢的資料(此情況稱為 cache miss ),Oracle9i就會(huì)先從磁盤上數(shù)據(jù)文件讀出適當(dāng)?shù)臄?shù)據(jù)區(qū)塊,放入緩沖區(qū)之后,使用者才從緩沖區(qū)讀取資料。您可以想象一下:在 “cache hit” 的情況下查詢資料的速度是不是比在 ”cache miss” 的情況還快很多呢?事實(shí)上,這就是資料快取緩沖區(qū)的主要用途所在。
  
  
  
  讓我們進(jìn)行更深入的討論!
  
  
  
  
  
  當(dāng)資料區(qū)塊從磁盤讀出,預(yù)備放入緩沖區(qū)時(shí),系統(tǒng)必須先確定資料快取緩沖區(qū)內(nèi)有free buffers。這時(shí)候Oracle9i 會(huì)開始掃描 LRU list,掃描的原則為:
  
  n      從 LRU 端掃到 MRU 端
  
  n      當(dāng)掃描到 free buffer;或是已掃描的緩沖區(qū)數(shù)目超過臨界值時(shí),就會(huì)停止掃描動(dòng)作
  
  n      掃描 LRU list 時(shí)假如發(fā)現(xiàn)了dirty buffer,就將它移到 write list,然后繼續(xù)掃描
  
  假如掃描過程順利在LRU list 內(nèi)找到 free buffer,那么Oracle9i就會(huì)把從磁盤讀出的數(shù)據(jù)區(qū)塊放入此 free buffer中,然后再把它移到 LRU list 的 MRU 端。
  
  但是,假如 LRU list 真的都沒有free buffer怎么辦呢?那么Oracle9i 就會(huì)停止掃描動(dòng)作,然后通知數(shù)據(jù)庫(kù)寫入器(database writer)背景處理程序?qū)⒉糠?dirty buffers 先寫入磁盤,接著從 LRU list 的 LRU端開始清除緩沖區(qū)。如此一來就可以空出新的free buffer了。
  
  Tips:LRU list 與 LRU 算法
  
  所謂 LRU (least recently used)算法之基本概念為:當(dāng)內(nèi)存內(nèi)剩余可利用的空間不足時(shí),緩沖區(qū)盡可能先保留使用者最常使用的資料;換言之,優(yōu)先清除”較不常使用的資料”,并釋放其空間。我以圖標(biāo)方式為大家說明:
  
  我們將 LRU list 想象成是長(zhǎng)條型一連串的緩沖區(qū)集合,兩端點(diǎn)分別為「MRU端」以及「LRU端」。所謂的「MRU」為「Most Recently Used」之縮寫,我將之譯為”最常使用的”(或是”最近使用的”)。所以,愈靠近MRU端的緩沖區(qū),代表其為被使用者最近查詢過的資料。同理,我們將「LRU」端視為”最不常被查詢的資料(Least Recently Used)”,或是”很久都沒被再次查詢的資料”。如下圖2中的 State 0 所示:(假設(shè)目前LRU list沒有任何資料存放)
  
   Oracle9i 數(shù)據(jù)庫(kù)治理實(shí)務(wù)講座(三)-Oracle9i Instance組成與運(yùn)作原理(圖三)
點(diǎn)擊查看大圖

  圖2:LRU list第一種使用情況。

  圖2的State1、State2、State3仿真某個(gè)使用者欲從Oracle9i數(shù)據(jù)庫(kù)查詢出三筆資料(A資料、B資料、C資料)。這三筆數(shù)據(jù)從磁盤讀出后,依序放入LRU list的free buffers。以State3為例:因?yàn)镃資料是”最近剛剛使用”的資料,所以最靠近MRU端;相較之下,A資料是”有一段時(shí)間都沒用的資料”,所以比較靠近LRU端。依此類推,假如使用者持續(xù)地查詢資料或進(jìn)行相關(guān)數(shù)據(jù)處理動(dòng)作,則LRU list內(nèi)的緩沖區(qū)都會(huì)被填滿,如圖2的State m所示:M資料填滿最后一個(gè)free buffer。
  
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 汽车| 山丹县| 顺义区| 朝阳区| 普洱| 富平县| 宝山区| 吉安县| 四子王旗| 三穗县| 犍为县| 公安县| 德令哈市| 饶平县| 屏山县| 进贤县| 瑞丽市| 蒙城县| 日喀则市| 图片| 克东县| 怀集县| 青河县| 上饶市| 黄山市| 蒙山县| 桃园县| 泽普县| 雷波县| 海阳市| 勃利县| 墨脱县| 偃师市| 云林县| 连山| 临洮县| 安阳市| 旺苍县| 宜宾县| 普安县| 富源县|