Oracle體系架構
1、Oracle 體系結構圖
由有上圖我們可以清楚的看到Oracle的各個元件的組成部分,下面對上圖進行介紹及說明
2、Oracle 體系結構
1)oracle server :database + instance2)database:data file 、control file 、redolog file
3)instance: an instance access a database
4)oracle memory: sga + pga
5)instance : sga + backgroud process
6)sga:database buffer cache+ shared pool + redo log buffer +( large pool + java pool + stream pool)可選
3、SGA
3.1 SGA的6個基本元件1)database buffer cache:Oracle用了執行SQL的工作區域,儲存從磁碟讀入的資料塊,為所有的使用者共享。伺服器程式將資料儲存在儲存在緩衝區中,使用者程式提交sql語句,會話的伺服器程式將掃描緩衝區的塊,如果找到,則發生一次緩衝區快取命中;不需要從磁碟讀取,提高效率。資料緩衝區中被修改的資料塊(髒塊)由後臺程式DBWR將其寫入磁碟。資料緩衝區的大小對資料庫的讀取速度有直接的影響。
1.1)Database buffer cache中的chache
Buffer pool=(default pool)+(nodefault pool)
其中:
default pool(db_cache_size) //是標準塊存放的記憶體空間大小,SGA自動管理時此引數不用設定。使用LRU演算法清理空間
nodefault pool:
db_nk_cache_size //指定非標準塊大小記憶體空間,比如2k、4k、16k、32k。
db_keep_cache_size //keep 存放經常訪問的小表或索引等。
db_recycle_cache_size //與keep相反,存放偶爾做全表掃描的大表的資料。
SQL> create table scott.emp1 as select * from scott.emp;
Table created.
SQL> select segment_name,buffer_pool from dba_segments where segment_name='EMP1';
SEGMENT_NAME BUFFER_
------------------------- -------
EMP1 DEFAULT
SQL> alter table scott.emp1 storage(buffer_pool keep);
Table altered.
SQL> select segment_name,buffer_pool from dba_segments where segment_name='EMP1';
SEGMENT_NAME BUFFER_
------------------------- -------
EMP1 KEEP
如果要建立非標準塊的表空間,先前要設定db buffer中的與之對應的db_nk_cache_size引數。
SQL> alter system set db_16k_cache_size=8m;
System altered.
SQL> create tablespace tbs_16k datafile '/u01/app/oracle/oradata/rman1/tbs16k01.dbf' size 10m blocksize 16k;
SQL> select TABLESPACE_NAME,block_size from dba_tablespaces;
TABLESPACE_NAME BLOCK_SIZE
------------------------------ ----------
SYSTEM 8192
SYSAUX 8192
UNDOTBS1 8192
TEMP 8192
USERS 8192
TBS_CATALOG 8192
TBS_TEST 8192
TBS_16K 16384
1.3)檢視buffer cache命中率
SQL> select (1-(sum(decode(name, 'physical reads',value,0))/(sum(decode(name, 'db block gets',value,0))+
2 sum(decode (name,'consistent gets',value,0))))) * 100 "Hit Ratio" from v$sysstat;
Hit Ratio
----------
92.0081258
2) shared pool
共享池是對SQL、PL/SQL程式進行語法分析、編譯、執行的記憶體區域。
共享池由庫快取(library cache),和資料字典快取(data dictionary cache)以及結果快取(result cache)等組成。
共享池的大小直接影響資料庫的效能。
關於shared pool中的幾個概念
library cache: sql和plsql的解析場所,存放著所有編譯過的sql語句程式碼,以備所有使用者共享。
data dictionary cache: 存放重要的資料字典資訊,以備資料庫使用
server result cache: 存放伺服器端的SQL結果集及PL/SQL函式返回值
User Global Area (UGA) 與共享伺服器模式有關
3)redo log buffer
日誌條目(redo entries )記錄了資料庫的所有修改資訊(包括DML和DDL), 為的是資料庫恢復,日誌條目首先產生於日誌緩衝區。 日誌緩衝區較小,它是以位元組為單位的,它極其重要。
SQL> show parameter log_buffer
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_buffer integer 7057408
如果想讓它是一個最小值,這樣可以做:
SQL> alter system set log_buffer =1 scope=spfile; //修改動態引數檔案,下次啟動有效。
SQL> startup force
SQL> show parameter log_buffer;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_buffer integer 2927616 //這就是最小值了
4)large pool(可選)
為了進行大的後臺程式操作而分配的記憶體空間,與shared pool管理不同,主要用於共享伺服器的session memory,RMAN備份恢復以及並行查詢等。
5)java pool(可選)
為了java虛擬機器及應用而分配的記憶體空間,包含所有session指定的JAVA程式碼和資料。
6) stream pool(可選)
為了stream process而分配的記憶體空間。stream技術是為了在不同資料庫之間共享資料,因此,它只對使用了stream資料庫特性的系統是重要的。
sga的granules(顆粒):組成oracle記憶體的最小單位
SGA_MAX_SIZE Granule Size
---------------------- ------------------------
<=1 GB 4 MB
1GB -- 8GB 16 MB
8GB --16GB 32 MB
16GB--32GB 64 MB
32GB--64GB 128 MB
64GB--128GB 256 MB
>128GB 512 MB
--檢視SGA分配情況
NAME Size(M)
-------------------------------- ----------
Fixed SGA Size 2.14937592
Redo Buffers 6.765625
Buffer Cache Size 656
Shared Pool Size 224
Large Pool Size 32
Java Pool Size 16
Streams Pool Size 0
Shared IO Pool Size 0
Granule Size 16
Maximum SGA Size 1576.91797
Startup overhead in Shared Pool 81.7750549
Free SGA Memory Available 640
4、 Oracle的程式
三種process: 1)user process、 2)server process 、3)background process
user process:使用者程式可以使連線Oracle伺服器程式的任何客戶端process,一般分為三種形式,1)sql*plus, 2)應用程式,3)web方式(EM)
客戶端請求,sqlplus是客戶端命令。
windows作為客戶端:可以透過檢視工作管理員看到sqlplus使用者程式:
linux作為客戶端時可以使用ps看到sqlplus關鍵字:
[oracle@rman1 rman1]$ ps -ef|grep sqlplus
oracle 9353 9322 0 07:32 pts/3 00:00:00 rlwrap sqlplus / as sysdba
oracle 9354 9353 0 07:32 pts/4 00:00:00 sqlplus as sysdba
server process:用來處理連線到例項的使用者程式提交的請求,user process不能直接訪問Oracle,必須透過相應的server process訪問例項,進而訪問資料庫。
可以在oracle檢視V$process檢視,它包括了當前所有的oracle程式,即後臺程式和伺服器程式。
SQL> select pid,program,background from v$process;
background欄位為1是background process,其餘都是server process
background process:實現為多使用者提供服務且保證系統效能,在一個多程式Oracle系統中,粗壯你多個被稱為後臺程式的Oracle程式。
基本的後臺程式
smon(System Monitor):系統監控程式
在例項崩潰之後,Oracle會自動恢復例項。另一個作用是釋放不再使用的臨時段。
pmon(process monitor):程式監控程式
1、當user process失敗時,清理出現故障的程式。 釋放所有當前掛起的鎖定。釋放伺服器端使用的資源
2、監控空閒會話是否到達閥值
3、動態註冊監聽
dbwn: 資料寫入程式
將髒緩衝區從資料庫緩衝區快取寫入資料檔案中,釋放data buffer空間
以下幾種情況dbwn執行寫操作
1、沒有可用的緩衝區
2、髒緩衝區過多(閥值)
3、超過3秒
4、遇到檢查點
SQL> select kvittag,kvitval,kvitdsc from x$kvit where kvittag in('kcbldq','kcbfsp');
KVITTAG KVITVAL KVITDSC
---------- ------- ----------------------------------------------------------------------
kcbldq 25 large dirty queue if kcbclw reaches this
kcbfsp 40 Max percentage of LRU list foreground can scan for free
kcbldq的kvitval=25 表示DRITY_list佇列中dirty_buffer達到25%閥值時,DBWN被觸發
kcbfsp的kvitval=40 表示LRU_list中free block低於40%時,DBWR被觸發
LGWR
lgwr:寫日誌條目,從redo log buffer到redo logfile (必須在dbwr寫髒塊之前寫入日誌)
負責將日誌緩衝區中的日誌條目寫入日誌檔案。 有多個日誌檔案,該程式以迴圈的方式將資料寫入檔案。
以下4個狀況發生時, lgwr都會寫
1)commit, 2)三分之一滿,3)先於dbwr寫(先記後寫,先記日誌後寫髒塊,保證未提交資料都能回滾),4)3秒(由DBWR的3秒傳導而來)
ckpt:生成檢查點, 通知或督促dbwr寫髒塊
完全檢查點:保證資料一致性。增量檢查點:不斷更新控制檔案中的檢查點位置,當發生例項崩潰時,可以儘量縮短例項恢復的時間。
arcn:歸檔模式下,發生日誌切換時,把當前日誌組中的內容寫入歸檔日誌,作為備份歷史日誌。
確定哪些程式正在執行,以及每個程式的數量
SQL> select program from v$session order by program;
SQL> select program from v$process order by program;
5、pga
pga(program global area)提供服務程式儲存資料及控制資訊的記憶體區域。服務程式啟動時由Oracle建立的非共享的記憶體去。只有服務程式才能訪問屬於自己的PGA,
特點:屬於oracle記憶體結構,存放使用者遊標、變數、控制、資料排序、存放hash值。與SGA不同,PGA是獨立的,非共享。
特點:屬於oracle記憶體結構,存放使用者遊標、變數、控制、資料排序、存放hash值。與SGA不同,PGA是獨立的,非共享。
6、使用者與Oracle伺服器的連線方式
6.1 專用連線模式(dedicated server process)
對於客戶端的每個user process,伺服器端都會出現一個server process,會話與專用伺服器之間存在一對一的對映。對專用連線來說,使用者在客戶端啟動了一個應用程式,例如sql*plus,就是在客戶端啟動一個使用者程式;與oracle伺服器端連線成功後,會在伺服器端生成一個伺服器程式,該伺服器程式作為使用者程式的代理程式,代替客戶端執行各種命令並把結果返回給客戶端。使用者程式一旦中止,與之對應的伺服器程式立刻中止。
專用連線的PGA的管理方式是私有的。Oracle預設採用專用連線模式。
6.2 共享連線模式(shared server process)
多個user process共享一個server process。它透過排程程式(dispatcher)與共享伺服器連線,共享伺服器實際上就是一種連線池機制(connectionpooling),連線池可以重用已有的超時連線,服務於其它活動會話。來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28282660/viewspace-1411523/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【DATAGUARD】Oracle Dataguard體系架構詳解Oracle架構
- 4.3. Oracle整體架構Oracle架構
- MySQL體系架構MySql架構
- Tomcat 體系架構Tomcat架構
- SQLite體系架構SQLite架構
- oracle體系結構(轉)Oracle
- 『網際網路架構』軟體架構-mybatis體系結構(14)架構MyBatis
- 【Oracle體系結構】 Oracle19C 系統結構介紹Oracle
- 0718_oracle 體系結構Oracle
- 2_指令集、體系架構、微架構架構
- GPU體系架構(二):GPU儲存體系GPU架構
- 軟體體系架構的認識架構
- 3:Oracle體系結構(邏輯結構)Oracle
- Oracle 架構彙總Oracle架構
- Oracle OCP(37):Database 體系結構OracleDatabase
- 軟體體系架構課堂測試07 –邏輯架構設計架構
- Kafka體系架構、命令、Go案例Kafka架構Go
- 架構知識體系總結架構
- 淺談Android os體系架構Android架構
- Oracle體系結構學習筆記Oracle筆記
- 程式設計體系結構(09):分散式系統架構程式設計分散式架構
- 論軟體系統架構風格架構
- 一文搞懂MySQL體系架構!!MySql架構
- 單體架構到垂直架構架構
- 移動端架構師_Android架構師成長體系課程架構Android
- 擁抱零信任理念,重構安全體系架構架構
- 【ASK_ORACLE】Oracle Data Guard(一)DG架構Oracle架構
- Oracle體系結構概述與SQL解析剖析OracleSQL
- 軟體體系結構課堂測試02– 架構評價架構
- 老闆:把系統從單體架構升級到叢集架構!架構
- 架構之:軟體架構漫談架構
- 分散式架構知識體系必讀分散式架構
- Tungsten Fabric架構解析丨詳解vRouter體系結構架構VR
- 單體架構&微服務架構&中臺服務架構架構微服務
- 分散式系統的那些事兒 - SOA架構體系分散式架構
- oracle19C技術架構Oracle架構
- 軟體架構模式之微服務架構架構模式微服務
- 軟體架構風格——規則架構架構
- MongoDB原始碼分析之Command體系架構CJMongoDB原始碼架構