學習是一個循序漸進的過程,從面到點、從宏觀到微觀,逐步滲透,各個擊破,對於Oracle, 怎麼樣從宏觀上來理解呢?先來看一個圖,這個圖取自於教材,這個圖對於從整體上理解ORACLE 的體系結構元件,非常關鍵。
首先看張圖:
對於一個資料庫系統來說,假設這個系統沒有執行,我們所能看到的和這個資料庫相關的無非就是幾個基於作業系統的物理檔案,這是從靜態的角度來看,如果從動態的角度來看呢,也就是說這個資料庫系統執行起來了,能夠對外提供服務了,那就意外著資料庫系統啟動了自己的一個實體,綜合以上2個角度,Oracle如何定義上述描述呢?
我們來引入第一個概念,Oracle伺服器,所謂Oracle伺服器是一個資料庫管理系統,它包括一個Oracle實體(動態)和一個Oracle資料庫(靜態)。Oracle實體是一個執行的概念(如作業系統的行程),提供了一種訪問,Oracle資料庫的方式,始終開啟一個,並且只能開啟一個Oracle資料庫,Oracle實體有SGA和一些後臺服務行程組成,在後臺服務行程當中,DBWn PMON CKPT LGWR SMON是必備的後臺行程,而ad queue、rac、shared server、ad replication則是可選的,之所以可選,要們是因為離開它Oracle也能正常執行,要麼是一些高階的功能才可以用得到。
Oracle資料庫是一個被統一處理的的資料的集合,從物理角度來看包括三類檔案資料檔案,控制檔案,重做日誌檔案。從邏輯角度來看,Oracle資料庫至少包含一個表空間,表空間至少包含一個段,段由區做成,區有塊組成。需要註意的是表空間可以包含若干個資料檔案,段可以跨同一個表空間的多個資料檔案,區只能在同一個資料檔案內。
Oracle還設計了其他的關鍵檔案用來為整個系統服務,如配置檔案、密碼檔案、歸檔日誌檔案,還有還有使用者行程和服務行程,現在可以簡單理解下執行SQL陳述句就要用到這2個行程。
SGA |
SHARE POOL (共享池) 用如下命令可以調整 ALTER SYSTEM SET SHARED_POOL_SIZE=64M |
LIBRARY CACHE (庫高速快取) 1儲存最近使用的SQL和PL/SQL陳述句資訊 2包括SHARED SQL和SHARED PL/SQL 3用LRU演演算法管理 4大小由SHARE POOL大小決定 |
DATA DICTIONARY CACHE (資料字典高速快取) 1資料庫中最近使用的定義的集合 2包含資料庫檔案,表,索引,列,使用者,許可權和其他的資料庫物件相關資訊 3在語法分析階段,伺服器行程會在資料字典中查詢用於物件解析和驗證訪問的資訊 4將資料字典資訊高速快取到記憶體中,可縮短查詢和DML的響應時間 5大小由共享池的大小決定 |
||
DATABASE BUFFER CACHE (資料緩衝區高速快取) |
1儲存已從資料檔案檢索到的資料的複本 2大幅提高讀取和更新資料的效能 3使用LRU演演算法管理 4主塊的大小由DB_BLOCK_SIZE確定 |
|
REDO LOG BUFFER (重做日誌緩衝區) |
1記錄對資料庫資料塊作的全部更改 2主要用來恢復 3其中記錄的更改被稱作重做條目 4重做條目包含用於重新構建或重做更改的資訊 5大小由LOG_BUFFER定義 |
|
LARGE POOL (大型池) |
1 SGA可選的記憶體區 2分擔了共享池的一部分工作 3用於共享伺服器的UGA 4用於I/O伺服器行程 5備份和恢復操作或RMAN 6並行執行訊息緩衝區(前提PARALLEL_POOL_SIZE=TRUE) 7不使用LRU串列 8大小由LARGE_POOL_SIZE確定 |
|
JAVA POOL (JAVA池) |
1儲存JAVA命令服務分析要求 2安裝和使用JAVA時必須的 3大小有JAVA_POOL_SIZE確定 |
|
PGA |
PRIVATE SQL AREA (專用SQL區)
專用SQL 區的位置取決於為會話建立的連線型別。在專用伺服器環境中,專用SQL 區位於各自伺服器行程的PGA中。在共享伺服器環境中,專用SQL 區位於SGA 中。 管理專用SQL 區是使用者行程的職責。使用者行程可以分配的專用SQL 區的數目始終由 初始化引數OPEN_CURSORS 來限制。該引數的預設值是50。 |
PERSISTEN AREA (永久區) 包含系結資訊,並且只在關閉遊標時釋放 |
RUNTIME AREA (執行時區) 在執行請求時的第一步建立。對於INSERT、UPDATE 和DELETE命令,該區在執行陳述句後釋放,對於查詢操作,該區只在提取所有行或取消查詢後釋放。 |
||
SESSION MEMORY (會話記憶體) |
包含為保留會話變數以及與該會話相關的其它資訊而分配的記憶體。對於共享伺服器環境,該會話是共享的而不是專用的。 |
|
SQL WORK AREAS (SQL工作區) |
用於大量佔用記憶體的操作,如排序、雜湊聯接、點陣圖合併和點陣圖建立。 工作區的大小可進行控制和調整 |
下表是後臺行程總結
DBWn |
DBWn 延遲寫入資料檔案,直到發生下列事件之一: • 增量或正常檢查點 • 灰資料緩衝區的數量達到閾值 • 行程掃描指定數量的塊而無法找到任何空閑緩衝區時 • 出現超時 • 實時應用叢集(Real Application Clusters, RAC) 環境中出現ping 請求 • 使一般表空間或臨時表空間處於離線狀態 • 使表空間處於只讀樣式 • 刪除或截斷表 • 執行ALTER TABLESPACE 表空間名BEGIN BACKUP 操作 |
LGWR |
LGWR 在下列情況下執行從重做日誌緩衝區到重做日誌檔案的連續寫入: • 當提交事務時 • 當重做日誌緩衝區的三分之一填滿時 • 當重做日誌緩衝區中記錄了超過1 MB 的更改時 • 在DBWn 將資料庫緩衝區高速快取中修改的塊寫入資料檔案以前 • 每隔三秒 |
SMON |
例程恢復 – 前滾重做日誌中的更改 – 開啟資料庫供使用者訪問 – 回退未提交的事務處理 • 合併空閑空間 • 回收臨時段 |
PMON |
行程失敗後,後臺行程PMON 透過下麵的方法進行清理: • 回退使用者的當前事務處理 • 釋放當前保留的所有表鎖或行鎖 • 釋放使用者當前保留的其它資源 • 重新啟動已失效的排程程式 |
CKPT |
• 在檢查點發訊號給DBWn • 使用檢查點資訊更新資料檔案的標頭 • 使用檢查點資訊更新控制 啟動檢查點的原因如下: • 確保定期向磁碟寫入記憶體中發生修改的資料塊,以便在系統或資料庫失敗時不會丟失資料 • 縮短例程恢復所需的時間。只需處理最後一個檢查點後面的重做日誌條目以啟動恢復操作 • 確保提交的所有資料在關閉期間均已寫入資料檔案 由CKPT 寫入的檢查點資訊包括檢查點位置、系統更改號、重做日誌中恢復操作的起始位置以及有關日誌的資訊等等。 註:CKPT 並不將資料塊寫入磁碟,或將重做塊寫入聯機重做日誌。 |
ARCn |
• 可選的後臺行程 • 設定ARCHIVELOG 樣式時自動歸檔聯機重做日誌 • 保留資料庫的全部更改記錄 |
最後,舉一個使用者提交SQL陳述句的的例子來結束本文,如果使用者想提交SQL陳述句,那麼首先你必須要連線到Oracle實體,連線到Oracle實體有三種途徑:如果使用者登陸到執行Oracle實體的作業系統上,則透過行程間通訊進行訪問2C/S結構訪問3三層結構。發起連線的應用程式或工具通常稱為使用者行程,連線發起後,Oracle伺服器就會建立一個行程來接受連線,這個行程就成為服務行程,伺服器行程代表使用者行程與Oracle實體進行通訊,在專用伺服器連線樣式下,使用者行程和服務行程是1對1的關係,在共享伺服器樣式下,多個使用者行程可能共享一個服務行程。當伺服器行程開始和Oracle實體進行通訊時,一個會話就被建立了。顯然處理一個查詢要經過語法分析、系結、執行、提取等階段。
Oracle的基礎架構知識
筆者在學習Oracle之前,特地先去瞭解了OracleDB的框架。這樣對Oracle資料庫有一個整體的認知,有由高屋建領地的作用。磨刀不誤砍菜功吧。Oracle資料庫主要由一下5部分組成:
1. 物理結構
Oracle物理結構由控制檔案、資料檔案、重做日誌檔案、引數檔案、歸檔檔案、口令檔案組成
一個資料庫中的資料儲存在磁碟上物理檔案,被使用時,調入記憶體。其中控制檔案、資料檔案、重做日誌檔案、跟蹤檔案及警告日誌(trace files、alert files)屬於資料庫檔案;引數檔案(parameter file)口令檔案(password file)是非資料庫檔案。
-
資料檔案:儲存資料的檔案.資料檔案典型地代表了根據他們使用的磁碟空間和數量所決定的一個Oracle資料庫的容積。
於此我們需要知道的是,一個資料庫中的資料是儲存在磁碟上的物理檔案,被使用時才被調入記憶體中的。其中控制檔案、資料檔案、重做日誌檔案、跟蹤檔案、警告檔案屬於資料庫檔案。引數檔案、口令檔案屬於非資料庫檔案。
-
控制檔案:包含維護和驗證資料庫完整性的必要資訊、例如,控制檔案用於識別資料檔案和重做日誌檔案,一個資料庫至少需要一個控制檔案。控制檔案內容有:
-
資料庫名
-
表空間資訊
-
所有資料檔案的名字和位置
-
所有redo日誌檔案的名字和位置
-
當前的日誌序列號
-
檢查點資訊
-
關於redo日誌和歸檔的當前狀態資訊
-
控制檔案的使用過程是控制檔案把Oracle引導到資料庫檔案的其它部分。啟動一個實體時,Oracle從引數檔案中讀取控制檔案的名字和位置。安裝資料庫時,Oracle開啟控制檔案。最終開啟資料庫時,Oracle從控制檔案中讀取資料檔案的串列並開啟其中的每個檔案。
-
重做日誌檔案,含對資料庫所做的更改記錄,這樣萬一齣現故障可以啟用資料恢復。一個資料庫至少需要兩個重做日誌檔案。
-
跟蹤檔案及警告日誌(Trace Files and Alert Files),
-
跟蹤檔案是在instance 中執行的每一個後臺行程都有一個跟蹤檔案(trace file)與之相連。Trace file記載後臺行程所遇到的重大事件的資訊。
-
警告日誌( Alert Log)是一種特殊的跟蹤檔案,每個資料庫都有一個跟蹤檔案,同步記載資料庫的訊息和錯誤。
-
-
引數檔案:包括大量影響Oracle資料庫實體功能的設定,如以下設定:
-
資料庫控制檔案的定位
-
Oracle用來快取從磁碟上讀取的資料的記憶體數量
-
預設的最佳化程式的選擇
-
和資料庫檔案相關,執行兩個重要的功能,為資料庫指出控制檔案和為資料庫指出歸檔日誌的標的。
-
歸檔檔案:是重做日誌檔案的離線副本,這些副本可能對於從介質失敗中進行恢復很必要。
-
口令檔案:認證哪些使用者有許可權啟動和關閉Oracle例程.
2. 邏輯結構(表空間、段、區、塊)
-
表空間:是資料庫中的基本邏輯結構,一系列資料檔案的集合。
-
段:是物件在資料庫中佔用的空間.
-
區:是為資料一次性預留的一個較大的儲存空間.
-
塊:ORACLE最基本的儲存單位,在建立資料庫的時候指定.
3. 記憶體分配(SGA和PGA)
-
SGA:是用於儲存資料庫資訊的記憶體區,該資訊為資料庫行程所共享。它包含Oracle伺服器的資料和控制資訊,它是在Oracle伺服器所駐留的計算機的實際記憶體中得以分配,如果實際記憶體不夠再往虛擬記憶體中寫。
-
PGA:包含單個伺服器行程或單個後臺行程的資料和控制資訊,與幾個行程共享的SGA正相反,PGA 是隻被一個行程使用的區域,PGA在建立行程時分配,在終止行程時回收.
4. 後臺行程
包括資料寫行程(Database Writer,DBWR)、日誌寫行程(Log Writer,LGWR)、系統監控(System Monitor、SMON)、行程監控(Process Monitor、PMON)、檢查點行程(Checkpoint Process、CKPT)、歸檔行程、服務行程、使用者行程。
-
資料寫行程:負責將更改的資料從資料庫緩衝區高速快取寫入資料檔案
-
日誌寫行程:將重做日誌緩衝區中的更改寫入線上重做日誌檔案
-
系統監控:檢查資料庫的一致性如有必要還會在資料庫開啟時啟動資料庫的恢復
-
行程監控:負責在一個Oracle 行程失敗時清理資源
-
檢查點行程:負責在每當緩衝區高速快取中的更改永久地記錄在資料庫中時,更新控制檔案和資料檔案中的資料庫狀態資訊。該行程在檢查點出現時,對全部資料檔案的標題進行修改,指示該檢查點。在通常的情況下,該任務由LGWR執行。然而,如果檢查點明顯地降低系統效能時,可使CKPT行程執行,將原來由LGWR行程執行的檢查點的工作分離出來,由CKPT行程實現。對於許多應用情況,CKPT行程是不必要的。只有當資料庫有許多資料檔案,LGWR在檢查點時明顯地降低效能才使CKPT執行。CKPT行程不將塊寫入磁碟,該工作是由DBWR完成的。
init.ora檔案中CHECKPOINT_PROCESS引數控制CKPT行程的使能或使不能。預設時為FALSE,即為使不能。 -
歸檔行程:在每次日誌切換時把已滿的日誌組進行備份或歸檔
-
服務行程:使用者行程服務。
-
使用者行程:在客戶端,負責將使用者的SQL陳述句傳遞給服務行程,並從伺服器段拿回查詢資料。
5. SCN(System ChangeNumber):
-
系統改變號,一個由系統內部維護的序列號。當系統需要更新的時候自動增加,他是系統中維持資料的一致性和順序恢復的重要標誌。
Oracle架構實現原理、含五大行程解析
Oracle架構,講述了Oracle RDBMS的底層實現原理,是Oracle DBA效能調優和排錯的基礎理論。深入理解Oracle架構,能夠讓我們在Oracle的路上走的更遠。本章節主要是在對RDBMS的底層元件功能和實現原理有一定的瞭解的情況下,結合自身的工作經驗提出了對Oracle調優和排錯的思路。當然,對Oracle體系結構的理解是一個深遠的過程,需要不斷的更新修改。
Oracle RDBMS架構圖
一般我們所說的Oracle指的是Oracle RDBMS(Relational databases Management system),一套Oracle資料庫管理系統,也稱之為Oracle Server。而Oracle Server主要有兩大部分:Oracle Server = 實體 + 資料庫(Instance和Database是相互獨立的)。
-
資料庫 = 資料檔案 + 控制檔案 +日誌檔案
-
實體 = 記憶體池 + 後臺行程
所以可以細分為:Oracle Server = 記憶體池 + 後臺行程 + 資料檔案 + 控制檔案 + 日誌檔案
一臺Oracle
Server支援建立多個Database,而且每個Datacase是互相隔離而獨立的。不同的Database擁有屬於自己的全套相關檔案,例如:有各自的密碼檔案,引數檔案,資料檔案,控制檔案和日誌檔案。
Database由一些物理檔案(如:存放在儲存裝置中的二維表檔案)組成。二維表儲存在Database中,但Database的內容不能被使用者直接讀取,使用者必須透過Oracle instance才能夠訪問Database,一個Instance只能連線一個Database,但是一個Database可以被多個Instance連線。
將上面的Oracle RDBMS架構圖進行抽象分類,可以將Oracle架構抽象為:Oracle體系 = 記憶體結構 + 行程結構 + 儲存結構
記憶體結構
Oracle Instance是Oracle RDBMS的核心之一,負責RDBMS的管理功能。Oracle Instance主要由記憶體池SGA和後臺行程組成。
系統全域性區SGA
Oracle的架構不是很難也不是很容易,認真學肯定能學會。
記憶體池SGA的預設Size,會在安裝Oracle的時候會根據LinuxOS的sysctl.conf引數檔案來決定:
kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 1024 65000
net.core.rmem_default = 1048576
net.core.rmem_max = 1048576
net.core.wmem_default = 262144
net.core.wmem_max = 262144
檢視SGA的Size:
conn /as sysdba
Connected.
show user;
USER is "SYS"
select * from v$sga;
NAME VALUE
----------
Fixed Size 2022144
Variable Size 503317760
Database Buffers 1627389952
Redo Buffers 14753792
show sga
Total System Global Area 2147483648 bytes #對應kernel.shmmax = 2147483648
Fixed Size 2022144 bytes
Variable Size 503317760 bytes
Database Buffers 1627389952 bytes
Redo Buffers 14753792 bytes
SGA(System Global Area)是與Oracle效能關係最大的核心部分,也是對Oracle進行調優的主要考量。SGA記憶體池會在Instance啟動時被分配,在Instance關閉時被釋放。在一定範圍內,SGA可以在Instance執行時透過自動方式響應DBA的指令。如果想對SGA進行調優還必須理解SGA所包含如下幾種資料結構:
高速快取緩衝區(資料庫緩衝區)——oracle執行SQL陳述句的區域。
例如在更新資料時,使用者執行的SQL陳述句不會直接對磁碟上的資料檔案進行更改操作,而是首先將資料檔案複製到資料庫緩衝區快取(就是說資料庫緩衝區裡會存放著SQL相關資料檔案副本),再更改應用於資料庫緩衝區快取中這些資料塊的副本。而且資料塊副本將在快取中保留一段時間,直至其佔用的緩衝區被另一個資料庫改寫為止(緩衝區Size有限)。
在查詢資料時,為了提高執行效率,查詢的資料也要經過快取。建立的Session會計算出那些資料塊包含關鍵的行,並將它們複製到資料庫緩衝區中進行快取。此後,相關關鍵行會傳輸到Session的PGA作進一步處理。這些資料塊也會在資料庫快取區快取中保留一段時間。
一般情況下,被頻繁訪問的資料塊會存在於資料庫緩衝區快取中,從而最大程度地減少對磁碟I/O的需要。
那什麼時候會將被更新的資料塊副本寫入到磁碟中的資料檔案呢?
答案:如果在緩衝區快取中儲存的資料塊與磁碟上的資料塊不同時,那麼這樣的緩衝區常稱為”臟緩衝區”,臟緩衝區中的資料塊副本就必須寫回到磁碟的資料檔案中。
調優:資料庫緩衝區快取的大小會對效能產生至關重要的影響,具體需要多大的Size才能成為最佳配比還要結合實際的生產環境而言。總體而言可以依據以下兩點基本要求來判斷:
1. 快取應足夠大,以便能快取所有被頻繁訪問的資料塊。如果快取過小,那麼將導致磁碟I/0活動過多,因為頻繁訪問的資料塊持續從磁碟讀取,並由其他資料塊使用和重寫,然後再從磁碟讀取。
2. 但也不能太大,以至於它會將極少被訪問的塊也一併加入到快取中,這樣會增長在快取中搜索的時間。
資料庫緩衝區快取在Instance啟動時被分配。從資料庫9i開始,可以隨時將其調大或調小。可以採用手動方式重調,也可以根據工作負荷自動重調大小(事務)。
修改緩衝區DB_CACHE_SIZE地方法:
#Step1. 檢視SGA的大小:因為DB_CACHE_SIZE的size受SGA的影響
show parameter sga_max_size;
NAME TYPE VALUE
----------- ------------------------------
sga_max_size big integer 2G
#Step2. 檢視show parameter shared_pool_size的大小
show parameter shared_pool_size; NAME TYPE VALUE
----------- ------------------------------
shared_pool_size big integer 0
#Step3. 計算DB_CACHE_SIZE的大小:shared_pool_size + db_cache_size = SGA_MAX_SIZE * 70%
#Step4. 修改DB_CACHE_SIZE的大小
alter system set db_cache_size=1433M scope=spfile sid='demo';
System altered.
conn sys /as sysdba
Enter password: ********
Connected.
shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
startup
ORACLE instance started.
Total System Global Area 2147483648 bytes
Fixed Size 2022144 bytes
Variable Size 503317760 bytes
Database Buffers 1627389952 bytes
Redo Buffers 14753792 bytes
Database mounted.
Database opened.
show parameter db_cache_size
日誌緩衝區
日誌緩衝區是小型的、用於短期儲存將寫入到磁碟上的重做日誌的變更向量的臨時區域。主要作用是提供更加快的日誌處理效率。
共享池
共享池的大小也對效能產生重要影響:
1. 它應該足夠大,以便快取所有頻繁執行的程式碼和頻繁訪問的物件定義。如果共享池過小,則效能下降,因為伺服器會話將反覆搶奪其中的空間來分析陳述句,此後,這些陳述句會被其他陳述句重寫,在重新執行時,將不得不再次分析。如果共享池小於最優容量,則效能將下降。但有一個最小容量,如果低於此限度,則陳述句將失敗。
2. 但也不能過大,以至於連僅執行一次的陳述句也要快取。過大的共享池也會對效能產生不良影響,因為搜尋需要的時間過長。
確定最優容量是一個效能調整問題,大多數資料庫都需要一個數百MB的共享池。有些應用程式需要1GB以上的共享池,但很少有應用程式能夠在共享池小於100MB時充分執行。共享池內有下列三種資料結構:
-
庫緩衝:儲存最近執行的程式碼
-
資料字典快取:儲存最近使用的物件定義
-
PL/SQL緩衝區:儲存的PL/SQL物件是過程、函式、打包的過程、打包的函式、物件型別定義和觸發器。
手動的調整共享池的大小:
select COMPONENT,CURRENT_SIZE,MIN_SIZE,MAX_SIZE from v$sga_dynamic_components; //顯示可以動態重設大小的SGA元件的當前最大和最小容量
ALTER SYSTEM SET SHARED_POOL_SIZE = 110M;
其他結構
大型池——主要用途是供共享的伺服器行程使用。
JAVA池——只有當應用程式需要在資料庫中執行java儲存程式時,才需要java池。
行程結構
行程結構主要有後臺行程和使用者連線行程兩大類。
使用者連線行程
使用者連線行程是連線使用者和Oracle Instance的橋梁。只有在User與Instance建立了連線以後,User才能夠對Oracle Server進行操作。
使用者連線行程 = 使用者行程 + 服務行程 + PGA
使用者行程User Process
當一個Database User請求連線到Oracle Server時,Oracle Server會建立User Process。
User Process的作用:
-
為Database User與Server Process建立連線
-
並不會直接與Oracle Server互動
connect連線:是User和Server Process之間的通訊通道。
Server Process服務行程
用於處理Database User和Oracle Server之間的連線。
當一個User與User Process建立了一個connect後,Oracle Server會建立一個Server Process。然後再由User Process與Server Process建立了連線之後,Server Process會透過使用者提交的請求資訊來確定與oracle instance建立一個會話。
Server Process的作用:
-
與Oracle Server直接互動
-
複製執行和傳回結果
Session會話:一個使用者透過User Process(本質是透過Server Process)與Oracle Instance建立連線後稱之為一個會話,一個使用者可以建立多個會話,即同時使用同一個使用者可以多次的連線到同一個實體,也就是說多個session可以使用同一個connect。
程式全域性區PGA
PGA:Oracle Server Process分配來專門用於當前User Session的記憶體區。該區域是私有的,不同的使用者擁有不同的PGA。
PGA包含了Server Process資料和控制資訊的記憶體區域。,由下列3個部分組成:
1. 棧空間:儲存Session的變數、陣列等的記憶體空間。
2. Session Info:如果執行的不是多執行緒伺服器,會話資訊將儲存在PGA中,如果是多執行緒伺服器,則儲存在SGA中。
3. 私有SQL區:用來儲存系結變數(binding variables)和執行時緩衝區(runtime buffers)等資訊。
Oracle的connect連線和session會話與User Process緊密相關
註意:在RDBMS中由db\_name和instance\_name共同確定一個Database,所以Instance_name被用於Oracle與OS之間的聯絡同時也被用於Oracle Server與外部連線時使用。
所以在User提交連線請求的時候,User Process首先會與Server Process建立Connect,然後Server Process會透過請求中所包含的db\_name和Instance\_name來確定需要且可以被連線的資料庫(RDBMS可以存在多個資料庫),這樣就確保了RDBMS在擁有多個資料庫的情況下,還能夠保證每一個Database的獨立性。而且同一個Database可以被多個屬於這個Databse的不同使用者發起的Instance連線。這一個功能是非常有必要的,因為每一個不同的資料庫中都包含有同名的sys、system等系統使用者。
後臺行程
後臺行程主要是完成資料庫管理任務 ,後臺行程是Oracle Instance和Oracle Database的聯絡紐帶,分為核心行程和非核心行程。
1. 核心行程:核心行程,必須存在,有一個終止,所有資料庫行程全部終止,實體崩潰!其中五大行程全都是核心行程。
2. 非核心行程:完成資料庫的額外功能,非核心行程死亡資料庫不會崩潰!
常用的核心行程:
在使用者訪問資料庫時,首先會提交請求,再分配SGA記憶體,建立並啟動後臺行程和實體,最後建立連線和會話。Oracle Server執行過程中必須啟動上面的前五個行程。否則實體無法建立。
檢視後臺行程:
select name,description from v$bgprocess where paddr<>'00';
NAME DESCRIPTION
----------------------------------------------------------------
PMON process cleanup
PSP0 process spawner 0
MMAN Memory Manager
DBW0 db writer process 0
LGWR Redo etc.
CKPT checkpoint
SMON System Monitor Process
RECO distributed recovery
CJQ0 Job Queue Coordinator
QMNC AQ Coordinator
MMON Manageability Monitor Process
NAME DESCRIPTION
----------------------------------------------------------------
MMNL Manageability Monitor Process 2
資料庫寫入行程(DBWn)
Server process連線Oracle後,透過資料庫寫行程(DBWn)將資料緩衝區中的“臟緩衝區”的資料塊寫入到儲存結構(資料檔案、磁碟檔案)
Database writer (DBWn)資料庫寫行程:
-
只做一件事,將資料寫到磁碟。就是將資料庫的變化寫入到資料檔案。
-
該行程最多20 個,即使你有36 個CPU 也只能最多有20 個資料庫寫行程。
行程名稱DBW0-DBW9 DBWa-DBWj -
註意:資料庫寫行程越多,寫資料的效率越高。該行程的個數應該和cpu的個數對應,如果設定的資料庫寫行程數大於CPU 的個數也不會有太明顯的效果,因為CPU 是分時的。
檢查點(CKPT)
Checkpoint (CKPT)檢查點行程:
-
主要使用者更新資料檔案頭,更新控制檔案和觸發DBWn資料庫寫行程。
-
Ckpt 行程會降低資料庫效能,但是提高資料庫崩潰時,自我恢復的效能。我們可以理解為階段性的儲存資料,一定的條件滿足就觸發,執行DBWn存檔操作。
行程監視行程(PMON)
Process monitor(PMON)行程監測行程:
PMON在後臺行程執行失敗後負責清理資料庫快取和閑置資源,是Oracle的自動維護機制。
-
清除死行程
-
重新啟動部分行程(如排程行程)
-
監聽的自動註冊
-
回滾事務
-
釋放鎖
-
釋放其他資
系統監視行程(SMON)
System monitor (SMON)系統監測行程:
-
SMON啟動後會自動的用於在實體崩潰時進行資料庫實體自動恢復。
-
清除作廢的排序臨時段,回收整理碎片,合併空閑空間,釋放臨時段,維護閃回的時間點。
-
在老資料庫版本中,當我們大量刪除表的時候,會觀測到SMON行程很忙,直到把所有的碎片空間都整理完畢。
重做日誌檔案和日誌寫入行程
主要用於記錄資料庫的改變和記錄資料庫被改變之前的原始狀態,所以應當對其作多重備份,用於恢復和排錯。
啟用LGWR的情況:
-
提交指令
-
日誌緩衝區超過1/3
-
每三秒
-
每次DBWn執行之前
歸檔行程(ARCn)——是非核心行程。
儲存結構
Oracle RDBMS儲存結構主要由Database組成。
又能夠將Database分為物理結構和邏輯結構來理解。
物理結構
Database物理結構:是Database在作業系統中的檔案集合,即:磁碟上的物理檔案,主要由資料檔案、控制檔案、重做日誌檔案、歸檔日誌檔案、引數檔案、口令檔案組成。
Data Files
資料檔案是資料的儲存倉庫:
• 包括所有的資料庫資料
• 只能屬於一個資料庫
• 來自於被稱為”表空間”的資料庫儲存邏輯單元
• 可以直接被讀進記憶體,在執行SQL陳述句的時候,會將相關的資料檔案副本載入如資料緩衝區。
• 透過備份策略可以使資料檔案得到保護
Redo Log Files
重做日誌檔案包含對資料庫所做的更改操作記錄,在Oracle發生故障時能夠恢復資料。
能夠恢復資料的原理:重做日誌檔案會按時間的順序,將應用於資料庫的一連串的變更向量(做了什麼操作)儲存起來(即將變更的地方標記起來)。其中包含了所有已經完成操作的資訊和完成操作之前的資料庫狀態。如果資料檔案受損,就可以將這些變更向量應用於資料檔案備份來進行重做(重建)工作,將它恢復到發生故障的那一刻前的狀態。重做日誌檔案又分為下麵兩種型別:
-
聯機重做日誌檔案:記錄連續的資料庫操作
-
歸檔日誌檔案Archived Log Files:用於時間點恢復,當RedoLogFiles存滿時,會對這些日誌進行歸檔備份,以便以後還原資料時使用。
-
檢視redo log info:
-
SQL> select member from v$logfile;
MEMBER
--------------------------------------------------------------------------------
/u01/oradata/demo/redo03.log
/u01/oradata/demo/redo02.log
/u01/oradata/demo/redo01.log
Control Files
控制檔案包含維護和驗證資料庫完整性的必要的資訊。
它記錄了聯機重做日誌檔案、資料檔案的位置、更新的歸檔日誌檔案的位置。它還儲存著維護資料庫完整性所需的資訊,如資料庫名。控制檔案是以二進位制型式儲存的,使用者無法修改控制檔案的內容。控制檔案不過數MB,卻起著至關重要的作用。
Parameter File
實體引數檔案,當啟動oracle實體時,SGA結構會根據此引數檔案的設定記憶體,後臺行程會據此啟動。
Password File
使用者透過提交username/password來建立會話,Oracle根據儲存在資料字典的使用者定義對使用者名稱和口令進行驗證。
邏輯結構
表空間就是典型的Oracle邏輯結構型別 —— 裡面存放著若干的資料檔案。
表空間:用於儲存資料庫物件的邏輯空間,表空間是在資料庫中開闢的一個空間,用於存放資料庫的物件,它是資訊儲存的最大邏輯單位,是存放資料庫檔案的地方,其中資料又被存放在表空間中的資料檔案中。一個資料庫可以由多個表空間組成,Oracle的調優就是透過表空間來實現的。(Oracle資料庫獨特的高階應用)
表空間的作用:分類管理、批次處理; 將瑣碎的磁碟檔案整合、抽象處理成為邏輯結構。這樣更加便於我們去管理資料庫。
邏輯空間到物理空間的對映
段、區和塊:
執行一條寫入的SQL陳述句時在RDBMS中都發生了什麼
1. 將SQL陳述句載入入資料庫緩衝區
2. 將SQL陳述句要操作的資料檔案副本載入入資料庫緩衝區
3. 執行SQL陳述句,修改資料檔案副本,形成“臟緩衝區”
4. CKPT檢測到“臟緩衝區”,呼叫DBWn
5. 在DBWn執行之前,先運行了LGWR,將資料檔案的原始狀態和資料庫的改變記錄到Redo Log Files
6. 執行DBWn,將“臟緩衝區的內容寫入到資料檔案”
7. 同時CKPT修改控制檔案和資料檔案頭
8. SMON回收不必要的空閑資源
最後
最後我們舉個例子來看看Oracle RDBMS是怎麼運作的
-
User訪問Oracle Server之前提交一個請求(包含了db_name、instance_name、username、password等資訊),Oracle Server接收到請求並透過Password File的驗證後,分配SGA記憶體池,啟動後臺行程同時建立並啟動實體。
-
在啟動實體之後User Process與Server Process建立Connect。
-
再透過Server process和Oracle Instance完成建立Sesscion。
-
使用者執行SQL陳述句,由server process接收到並直接與Oracle互動。
-
SQL陳述句透過Server Process到達Oracle Instance,再將SQL載入資料庫緩衝區。
-
Server Process通知Oracle Database將與SQL陳述句相關的資料塊副本載入到緩衝區中。
-
在資料庫快取區執行SQL陳述句,並產生”臟緩衝區”。
-
由CKPT檢查點行程檢查到”臟緩衝區”,並呼叫DBWn資料庫寫行程,但在DBWn執行之前,應該由LGWR先將資料檔案的原始狀態、資料庫的改變等資訊記錄到Redo Log Files。
-
將更新的內容寫入到磁碟中的資料檔案。
-
傳回結果給使用者
朋友會在“發現-看一看”看到你“在看”的內容