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

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

Oracle9i 數(shù)據(jù)庫(kù)管理實(shí)務(wù)講座(三)

2024-08-29 13:40:07
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

  前言
  
  前兩期的專欄內(nèi)容已分別為大家介紹了 Oracle9i for linux 的安裝方式,以及Oracle9i 企業(yè)版概觀。但是如何組態(tài)與治理 Oracle9i 數(shù)據(jù)庫(kù)才是我們要討論的重點(diǎn)。本文將深入探討 Oracle9i Instance的組成要素與其運(yùn)作原理,為您揭開 Oracle9i 的神秘面紗。
  
  本文將涵蓋以下主題:
  
  n Oracle9i 服務(wù)器架構(gòu)簡(jiǎn)介。
  
  n 何謂 Oracle9i Instance
  
  n 系統(tǒng)全域區(qū)
  
  n 背景處理程序
  在開始任何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è)主要部分:
  
  n Oracle9i執(zhí)行個(gè)體(Oracle9i Instance)
  
  n 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ù)講座(三)(圖一)
  圖1:Oracle9i 服務(wù)器基本架構(gòu)。
  
  圖1上半部為內(nèi)存內(nèi)Oracle9i Instance,下半部則是位于操作系統(tǒng)的各種數(shù)據(jù)庫(kù)檔案(有關(guān)這些檔案的細(xì)部信息將在下一期說(shuō)明)。彼此之間是藉由各個(gè)背景處理程序互相溝通。
  接下來(lái)我們先討論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)
  
  來(lái)看看什么是「系統(tǒng)全域區(qū)」?
  
  系統(tǒng)全域區(qū)
  
  當(dāng)您激活Oracle9i數(shù)據(jù)庫(kù)時(shí),系統(tǒng)會(huì)先在內(nèi)存內(nèi)規(guī)劃一個(gè)固定區(qū)域,用來(lái)儲(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ù)哪能一天到晚開來(lái)關(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ù)值來(lái)配置適當(dāng)大小的內(nèi)存空間。換言之,我們可以在激活I(lǐng)nstance之前就先規(guī)劃這些參數(shù)的設(shè)定值,并儲(chǔ)存在操作系統(tǒng)下的某個(gè)檔案里。往后只要利用此檔案就可開啟相對(duì)應(yīng)的Oracle Instance — 我們就將這個(gè)檔案稱之為起始參數(shù)檔。
  
  一般來(lái)說(shuō),我們還是應(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ù)講座(三)(圖二)
  注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è)定值無(wú)效。
  如圖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 的主要成員,用來(lái)存放讀取自數(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ū)。如此一來(lái)就可以空出新的free buffer了。
  Tips:LRU list 與 LRU 算法
  
  所謂 LRU (least recently used)算法之基本概念為:當(dāng)內(nèi)存內(nèi)剩余可利用的空間不足時(shí),緩沖區(qū)盡可能先保留使用者最常使用的資料;換言之,優(yōu)先清除”較不常使用的資料”,并釋放其空間。我以圖標(biāo)方式為大家說(shuō)明:
  
  我們將 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ù)講座(三)(圖三)
  圖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。
  
  假如下一次的查詢動(dòng)作預(yù)備再?gòu)拇疟P讀出N資料時(shí)存入緩沖區(qū)時(shí),LRU list已經(jīng)沒有free buffer可以使用,系統(tǒng)只好清空LRU端存放A資料的緩沖區(qū),接著再放入N資料,結(jié)果如圖2State n所示。這就是LRU算法的基本運(yùn)作方式。
  
  讓我們討論另一種情況:
  
  假設(shè)在State3之后,恰好有某些使用者持續(xù)地查詢A資料 — 這會(huì)導(dǎo)致A資料一直存放在靠近MRU端的緩沖區(qū)。假如M資料被放入LRU list最后一個(gè)緩沖區(qū),結(jié)果將如圖3的State m’ 所示:您會(huì)發(fā)現(xiàn)圖3的State m’ 與圖2的State m 有點(diǎn)不同(緩沖區(qū)的存放數(shù)據(jù)完全相同,但存放位置不盡相同)。這時(shí)候LRU list內(nèi)也沒有 free buffer了,所以再放入N資料時(shí),系統(tǒng)會(huì)清除LRU端存放B資料的緩沖區(qū)。不同于第一種情況的是:因

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 开封市| 东海县| 新民市| 广河县| 萨嘎县| 绥德县| 夏邑县| 中超| 东方市| 东乌珠穆沁旗| 舒兰市| 会同县| 民勤县| 财经| 襄垣县| 枣强县| 昭苏县| 南充市| 蕲春县| 建阳市| 和静县| 华容县| 天峨县| 葫芦岛市| 汽车| 奈曼旗| 湘乡市| 专栏| 清徐县| 苍南县| 沁阳市| 威信县| 新营市| 金秀| 军事| 景泰县| 增城市| 苏州市| 隆昌县| 应用必备| 潜江市|