[轉]oracle學習入門系列之五記憶體結構、資料庫結構、進程

來源:互聯網
上載者:User

標籤:

原文地址:http://www.2cto.com/database/201505/399285.html

1 Oracle資料庫結構

關於這個話題,網上一搜絕對一大把,更別提書籍上出現的了,還有很多大師們的講稿。但是我們不去管那些,按照我們自己節奏記出特性、記出精彩來。

首先插入本系列第一張圖片,圖一(絕對來自官網),看蛤蟆對於圖片使用是多麼小心的,如果大夥對這個圖已有自己獨到的理解,那麼可直接跳過本篇筆記吧,當然溫故而知新也未嘗不可,知恥而後勇….額,而來知恥?

1.1 總體結構

這個圖1從總體上描述了Oracle資料庫的大概了,包含有記憶體結構,資料庫檔案,進程及用戶端。雖然不是非常詳細但是蛤蟆覺得該圖是在是理解ORACLE資料庫入門的好圖。

那麼我們一起圍觀下該圖到底說了些什麼。

服務進程,這裡展開就是服務進程是專用服務進程還是共用,後續會慢慢道來。

記憶體結構,記憶體結構中主要包含PGA和SGA,PGA是為用戶端接入時候服務,SGA是資料庫運行服務的,這些在機器下電後就消失了。

還有主要的6個進程PMON,SMON,DBWR,LGWR,CHPT,Arcn,在啟動資料庫的時候才會有這些進程。

最下面就是存放在持久化介質上檔案了,有歸檔日誌,資料檔案,參數檔案,密碼檔案等,不隨機器下電而消失的。

途中有2個在Oracle中非常重要的概念,執行個體和資料庫:

1.1.1 執行個體

執行個體是oracle 建立的進程和記憶體結構的組合。

1.1.2 資料庫

資料庫是由一組檔案組成的,對資料庫的所有操作都是需要通過執行個體來完成了。通常資料庫和執行個體是一一對應的。例外就是RAC了,RAC下一個資料庫就對應了多個執行個體。

執行個體和資料庫關係打個比方就是發動機和汽車的關係。汽車就是資料庫,就在那裡,但是動不了,只有發動機發動了,汽車才能動起來。一般情況下一個汽車一個單缸發動機;但是也可以是多缸的嘛,如6缸發動機什麼的。

接下去看邏輯資料庫結構。

1.2 邏輯資料庫結構

放入第二章圖,如下圖2,如來自互連網

 

這裡需要提一些概念了,都是ORACLE資料庫中最基本而且需要一直掌握的概念,是一直,死都不能忘了,如果擔心自己忘記就記下來把。這裡提到的概念是一通百通的,很多可以適用到其他資料庫中的,記住後我們後續學習必將事半功倍。

我們從最下面開始介紹吧,枯燥但不乏味的哈~

1.2.1 資料區塊

資料區塊,data block,是oracle資料區塊的儲存基礎,有若干位元組組成。又是若干,到底是多少個位元組呢?一般常用的是8KB,4KB的了,在建立資料庫的時候可以 指定。一旦指定就不能改變了,不過即使在4KB的資料庫中,我們也可以指定建立8KB的資料表空間的,只要我們記憶體結構中存在8KB的緩衝。

資料區塊類似作業系統中的塊大小,通常ORACLE資料庫塊大小會是作業系統塊大小的整數倍,其中好處就無需多說了。

蛤蟆自身工作經驗來看,在OLTP模型上,4KB、8KB及16KB下效能相差不是特別明顯。

不過原則是塊尺寸是處理Oracle的更新、選擇或者插入資料事務的最小單位,且訪問很隨機,則選擇塊較小的塊尺寸;如果行比較小且訪問主要是連續,或者如果有較大的行,則用較大的塊尺寸。

1.2.2 資料區間

區,extent,是兩個或者多個相鄰的ORACLE資料區塊,他是空間分配的單元。概念總是如此的明了,3點關鍵。

a) 2個或2個以上

b) 相鄰的資料區塊

c) 空間配置單位

資料區塊是儲存單元,區是配置單位。看著概念重不重要的,從概念我們就知道,ORACKE分配空間的時候至少2個資料區塊起步的。要是申請一個資料區塊,那麼不好意思啦,就是不給。

就像小時候向爸爸媽媽要零花錢,

我們:“媽,給我5分錢,買個蘿蔔絲吃”

老媽:“!@#¥%……,沒有5分”

我們:“一毛也行”

老媽:“好吧,又買兩包蘿蔔絲?,給你1毛”

1.2.3 資料區段

段是分配給某個邏輯結構的一組區。

2個關鍵點

a) 分配給某個邏輯結構

b) 一組區

1.2.4 對象

ORACLE資料庫物件,主要就是如下10個了。

1) 表

2) 約束條件:保證資料完整性。

3) 視圖:虛表,命名的查詢語句。

4) 索引:加速查詢(加快查詢的速度)。

5) 序列:一串聯續遞增或遞減的數字,步長相同,(代理鍵) 。

6) 同義字:一個對象的另外一個叫法(對象的別名)。

7) 預存程序:用於操作

8) 函數:用作複雜運算的。用於計算。

9) 觸發器:由事件觸發的預存程序。

10) 包

對資料庫的操作可以基本歸結為對資料對象的操作,這個對象蛤蟆也不知道如何去定義它。對象也是一個邏輯結構,是建立於段之上的,有頭有臉的結構。

 

1.2.5 資料表空間

資料表空間是一組資料檔案,通常由相關的段組成。資料表空間是包含物理資料檔案的邏輯實體。資料表空間儲存資料庫的所有可用資料。

下節中就能看到資料表空間和物理資料檔案的對應關係。資料表空間也是一個邏輯結構是,資料庫下最大的邏輯結構了。

資料庫建立完後會有如下資料表空間

a) System資料表空間

b) Sysaux 資料表空間

c) 撤銷Undo資料表空間

d) 臨時temporary資料表空間

1.3 物理資料庫結構

上節介紹了oracle資料庫的邏輯結構,那麼接下去必須得看下,邏輯結構和實體儲存體結構是如何對應的。

首先在通常情況下我們可以這樣理解,ORAC LE資料庫由資料表空間組成;所以和物理資料庫結構相關的從資料表空間開始了。

先看如下圖3

 

從可以看出,邏輯結構比物理結構複雜了些許。

物理結構上就兩個東西 作業系統塊和檔案。上節中提到資料庫塊是作業系統塊的整數倍,也能反映一二。

這裡蛤蟆重點解釋下ORACLE資料庫中的檔案。

1.4 資料檔案

資料檔案一般是資料庫最大的實體儲存體部分,一個資料檔案只能屬於一個資料庫。一個或者多個資料檔案構成成為資料表空間的實體。

我們建立一個資料表空間時候,讓他擁有一個2G大小的資料檔案,那麼該資料表空間就能存放2G大小的資料量,有一天耗盡了這2G,那麼再增加一個資料檔案給這個資料表空間,當然也可以擴大原先資料檔案的大小。

注意:上篇提到了對象如索引、表等,雖然也是存在資料表空間所屬的資料檔案中,但是這些對象本身不會指定要存放在那個資料檔案上,資料檔案只與資料表空間關聯

資料庫中執行如下查看資料檔案所在

SQL>selectname from v$datafile;

 

1.5 控制檔案

一看這個檔案,蛤蟆就不禁感歎:如此之小,確如此重要啊。小身材,大作用。

這個控制檔案,管理了資料庫的狀態,非常重要,一般管理員都會進行至少3份備份。

控制檔案包含了資料檔案和重做記錄檔的名字、位置、日誌序號、備份等詳細資料,以及所有重要的SCN(系統更改號)。資料庫在操作過程中進程不斷的更新控制檔案。

控制檔案中的檢查點資訊使ORACLE能確定從聯機重做記錄檔中需要返回多少以便恢複資料。此外,在啟動oracle執行個體時,通過控制檔案,確定資料庫操作必須開啟的所有資料檔案和重做記錄檔。

你看,重要不?

查看控制檔案所在

SQL>selectname from v$controlfile

1.6 記錄檔

記錄檔其實準確的是重做記錄檔,記錄了對資料庫做的全部更改,有助於恢複資料庫。如果記錄檔寫滿後就會進行歸檔,歸檔的記錄檔叫做歸檔重做日誌,正在記錄的記錄檔叫做聯機重做記錄檔。

Oracle要求資料庫至少兩個重做日誌組,每個至少一個單獨的記錄檔。在歸檔的時候當前日誌組就不能用了,所以需要有第二個日誌組來接上。這樣迴圈,生生不息。

考慮到記錄檔恢複資料庫的作用,一般建議多工重做日誌,把日誌副本存放到不同的磁碟上,保證不會輕易丟失。

查看重做記錄檔所在

SQL>select member from v$logfile;

1.7 其他檔案

還有一些檔案,蛤蟆先簡單帶過一下吧,後續咱們再深入之。

SPFILE,PFILE,密碼檔案,警示記錄檔,追蹤檔案,備份檔案等。

SPFILE是oracle執行個體的初始化參數,這個檔案是二進位檔案無法手動編輯,我們可以通過命令從SPFILE來產生PFILE,PFILE可以支援手動編輯。下節中記憶體結構中的組件大小都可以在SPFILE或者PFILE中進行設定。

密碼檔案是授予SYSDBA或SYSOPER系統管理權限的資料庫使用者名稱字,和資料庫安全相關,後續蛤蟆會和大夥一起搗鼓搗鼓。

警示記錄檔,蛤蟆喜歡叫他alert日誌。捕捉了oracle執行個體運行期間的主要更改和事件。包含日誌切換、錯誤、警示和其他資訊,也是資料庫錯問題時候,蛤蟆第一時間查看地方,大夥沒事可以進去看看也。Alert記錄檔路徑:

$ORACLE_BASE/diag/rdbms/[SID]/trace/alert_[SID].log。

追蹤檔案,Oracle各類內部結構中所包含的資訊轉儲(dump)到追蹤檔案中,以便使用者能根據檔案內容來解決各種故障。

備份檔案,顧名思義,因為備份資料操作得到的檔案。

2 記憶體結構

記憶體結構也是ORACLE資料庫執行個體的組成部分。這個記憶體結構可以讓使用者之間共用可執行代碼,可以將資料庫更改寫入記憶體地區等,讓資料庫效能提升好幾個數量級。

我們看圖4

一圖勝過千言萬語啊,一看就明白了資料庫記憶體結構包括PGA和SGA,那麼問題來了,具體呢?

2.1 SGA

SGA是執行個體中最重要的記憶體組件了,特別是在OLTP資料庫系統中,比PGA要大很多。在資料倉儲環境下,PGA可能就是更重要的ORACLE記憶體地區。

2.1.1 資料庫緩衝區

儲存從檔案中讀取的資料區塊副本,提高讀取效能。

當然資料庫緩衝區本身還可以細化成:可用緩衝區,髒緩衝區,釘住緩衝區。

緩衝區的主要目的是最小資料未命中率和磁碟IO操作。

可以將一個緩衝區分成多個緩衝區提供給不同的對象使用,也可以設定多個資料庫塊尺寸的緩衝區(如4KB,8KB,16KB的)。

2.1.2 共用池

共用池是保持可執行PL/SQL代碼和SQL語句,以及資料字典表的資訊。其可以分為庫快取和字典快取。

註:資料字典是ORACLE維護的一組關鍵表,包含了又關資料表、使用者、許可權等重要的中繼資料。

該池可以減少相同代碼的編譯,減少硬解析從而減少記憶體和CPU資源。

蛤蟆就知道了資料字典和庫快取的低命中率的解決方案是相同的,即增加共用池的尺寸。

2.1.3 重做日誌緩衝區

我們待會回將日誌寫入進程,因為日誌寫入進程的重新整理頻率,該區大小不必太大,基本幾M就搞定了。

2.1.4 Java池

為JVM何基於JAVA的應用保留。

2.1.5 大池

在使用並行查詢時候才需要使用大池。此外使用RMAN和共用伺服器配置也需要建議配置大池。

2.1.6 流池

實現在不同資料庫之間和不同環境之間共用資料。

2.2 PGA

使用者啟動會話時為每個使用者建立一個程式全域區。PGA儲存ORACLE為使用者建立的專用伺服器處理序的資料和控制資訊。PGA是獨佔的不能共用,除非使用一個共用的伺服器配置。

PGA可以存放使用者的遊標,不與其他使用者共用,此外還會涉及一些排序類的記憶體密集型操作。

概念介紹大夥看看樂一樂好了,當前不需要太較真。

3 進程

進程是Oracle資料庫執行個體的一部分,我們說過oracle資料庫執行個體由記憶體結構和進程組成。

Oracle進程其實可以分為兩種,一種是使用者進程,用於串連使用者和資料庫;另一種是oracle進程,用於執行資料庫的所有實際操作(讀寫資料檔案,寫日誌等)。這裡蛤蟆來聊聊最主要的幾個後台進程,其他的進程咱有機會再說。

進程是什麼呢?這個蛤蟆就不說了哈

咱們直接進入正題,如下進程都可以在安裝ORACLE資料的系統中執行

#ps –ef | grep ora_

來查看。

3.1 資料寫進程 (DBWR)

這個進程的作用是將在記憶體中的資料寫入到磁碟中,使得對資料庫的修改持久化。因為考慮到效能問題,並不是對資料庫的所有修改多會直接寫磁碟,而是保留在記憶體中,等時機成熟才進行批量刷入到磁碟中,這對效能提升還是大大的。

這個時機就是如下三種情況:

a) 資料庫發布檢查點

b) 記憶體緩衝區沒有可用空間

c) 3秒

以上3點,任何一點滿足即可。

考慮到有些系統每次刷入的資料量較大,ORACLE就支援多個進程一起寫。通過在DB_WIRTER_PROCESSES參數在PFILE中設定,前提是系統支援非同步IO,不然不如只用一個寫進程。

3.2 日誌寫進程 (LGWR)

類似資料寫進程,將重做日誌在記憶體中的緩衝寫入到磁碟中。這個寫特點是100%順序寫。如果記錄檔不能被寫入,那麼資料庫就會停止工作了,當然這種情況極小發生。畢竟好端端的怎麼會突然不能被寫入了呢。

日誌寫也是有時機的類似資料寫進程,這進程有四個機會點了

a) 3秒

b) 緩衝區到三分之一

c) 資料寫進程觸發(先完成日誌寫進程,方進行資料寫進程,針對這個有個寫前協議)

d) 事務提交,將提交記錄寫到重做日誌

注意:重做記錄檔可能包含提交以及未提交的事務記錄。

3.3 系統監控進程 (SMON)

這是系統監控進程了,並非一直工作,周期性巡檢。主要處理

a) 執行個體崩潰重啟後,是否一致

b) 合并可用性區域(我們說過區是相鄰的資料區塊嘛)

c) 清除不必要的臨時段

3.4 進程監控進程 (PMON)

這個進程用於清除失敗的使用者進程,保證資料庫釋放死進程佔用的資源。這個進程和SMON一樣,一般是處於不活動的,但是會周期性的進行巡檢,類似魔獸世界中豬頭監工,不幹活,周期性的走走,看看誰在偷懶,偷懶的它就動手。

如果可以蛤蟆也希望變成PMON,SMON,他們兩兄弟幹活真實輕鬆啊,一看就是領導。

3.5 檢查點進程 (CKPT)

通知數據庫寫進程,這個還會觸發日誌寫進程的。該進程的作用是同步緩衝區快取資訊與資料庫磁碟上的資訊。

該進程具體是做了如下4個事情:

a) 日誌緩衝寫到記錄檔

b) 檢查點記錄寫入記錄檔

c) 刷資料緩衝到磁碟中

d) 更新資料檔案和控制檔案的頭

3.6 歸檔進程 (ARCn)

這個進程在系統以歸檔方式運行時才有,負責將填滿的記錄檔歸檔。就是將聯機記錄檔的內容產生一個歸檔日誌文檔。如果需要,可以同時設定多個進行進行歸檔操作。

這個進程在切換日誌的時候開始幹活。

如果我們在非歸檔模式運行,那麼壓根就沒有這個進程了,不過生產系統必須以歸檔模式運行,不然後果不堪設想,蛤蟆自己玩的系統崩潰也沒事的哈哈。

其他進程在此就不囉嗦了,後續自然會涉及。這篇到此結束~如果大夥感興趣就看下回筆記。

[轉]oracle學習入門系列之五記憶體結構、資料庫結構、進程

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.