1 oracle 的基礎架構及應用環境
php
oracle的基本組成結構java
oracle server =由數據庫+實例組成
node
database = 數據文件+控制文件+redo 日誌組成linux
oralce 內存調度= SGA+PGA組成web
oracle 實例= SGA +後臺進程組成算法
系統全局SGA
sql
1.在一個instance只有一個SGA ,一個系統能夠有多個實例。故一個系統能夠有不一樣的SGA
數據庫
2.SGA 內存爲全部oracle 客戶端生成的session 共享,隨着實例的啓動而分配,實例關閉,SGA 內網將被釋放apache
數據庫
緩存
2 SGA的基本組件
shared pool (共享池)
共享池是對sql,pl/sql 程序進行語法分析,編譯執行的內存區域。
共享池由庫緩存(library cache)和數據字典緩存(data dictionary cache )以及結果緩存(result cache)組成
共享池的大小直接影響數據庫的性能。
共享池中的幾個概念
庫緩存:庫緩存是sql和plsql的解析場所,存放sql、plsql語句代碼,以及他們的執行計劃。以備其餘用戶共享
數據字典緩存。主要存放的是數據字典信息。以備其餘用戶使用
結果緩存:存放的是之前執行過的sql的結果集和PL/sql 函數返回值
user global area(UGA)
存放服務器端的sql結果集及pl/SQL 函數返回值
共享服務器鏈接模式下 若是沒有配置large pool 則UGA 數據SGA的shared pool ,專用鏈接模式時UGA 屬於PGA
2 database buffer cache
用戶存儲從磁盤數據文件中讀入的數據,爲全部用戶共享。
服務器進程server process 負責將數據文件的數據,從磁盤讀入到數據緩衝區,當後續的請求須要在這些數據時若是在內存中找
到,則不須要再從磁盤中讀取。
數據緩衝區中被修改的數據庫(髒塊) 由後臺進程DBWR 將其寫入磁盤。
數據緩衝區的大小對數據庫的讀取速度有直接的影響。
database buffer cache中的幾個cache概念
buffer pool = (default pool) + (nodefault pool)
其中:
default pool 是標準塊存放的內存空間大小,SGA 自動管理時此參數不用設置,使用LRU 算法清理空間
nodefault pool 對應的參數有
DB_nk_cache_size 指定非標準塊大小的內存空間,好比2k 4k 16k 32k
DB_keep_caceh_size 存放常常訪問的小表或索引等。
DB_recycle_cace_size 與keep相反,存放偶爾作全表掃描的大表數據。
能夠將固定某個表調入到 nodefault pool中
alter table scott.emp1 storage(buffer_pool keep)
可使用命令進行查看
select segment_name,buffer_pool from dba_segments where segment_name='EMP1';
emp1 表保存了兩份,一份是在存儲上,一份是在內存裏
default pool 對應的參數是DB_cache_size 與標準塊default block 是配套的,若是default block是8k,DB_cache_size 這個參數將
代替db_8k_cache_size
若是要創建非標準塊的表空間,先前要設定db buffer中的與之對應的db_nk_cache_size 參數
SQL> alter system set db_16k_cache_size=8m;
SQL> create tablespace tbs_16k datafile '/u01/oradata/prod/tbs16k01.dbf' size 10m blocksize 16k;
SQL> select TABLESPACE_NAME,block_size from dba_tablespaces;
3 redo log buffer
以日誌條方式記錄數據庫的全部修改信息包括DML 和DDL ,目的是爲了數據庫恢復,日誌條目首先產生於
日誌緩衝區,日誌緩衝區較小,通常缺省在3M-15M 之間,它是以本身爲單位的
日誌緩衝區的大小啓動後是固定不變的,若是調整隻能經過修改參數文件後從新啓動生效,不能動態修改,
不能由SGA 自動管理
4 large pool (可選)
爲了進行大的後臺進程操做而分配的內存空間,主要用戶共享服務器的session memroy rman 備份恢復以及並行查詢等操做,有助於下降shared pool 碎片
5 java pool
爲了java虛擬機及應用而分配的內存空間,包含全部session指定的java代碼和數據
6.stream pool
爲了stream process 而分配的 內存空間,stream技術是爲了在不一樣數據庫之間共享數據,所以它只對使用了stream 數據庫特性的系統是重要的。
3 oracle 的進程
user process;
客戶端的的進程,訪問數據庫分爲三種形式,1.sql plus 2.應用程序 3 web方式(em)
server process
服務器器端的進程,user process 不能直接訪問oracle,必須經過相應的server process 訪問實例,進而訪問數據庫
linux 下命令 能夠查看
ps -ef | grep LOCA
在linux能夠看到的server process l(local=yes)是本地鏈接,(local=no) 是遠程鏈接
能夠在oracle 查看V$process 視圖,它包含了當前全部的後臺進程和服務器進程
select pid,program,background from v$process ;
background 字段爲1是 background process 其餘都是服務器進程
基本的後臺進程有
smon:系統監控進程,當實列崩潰後,oracle會自動恢復實列,釋放再也不使用的臨時短
pmon:進程監控,當用戶進程失敗時,清理出現故障的進程,釋放全部當前被掛起的鎖定,釋放服務器使用的資源,監控空閒會話是否達到閾值,動態註冊監聽
dbwr :數據寫入進程,將變動的數據緩衝區的髒buffer 寫入數據文件中,釋放數據緩衝區空間。能夠有多個進程
在如下狀況觸發dbwn 寫入數據文件1.檢查點發生,2內存髒塊達到閾值,3.db_buffer 自由空間不夠時 4.表空脫機在線備份時
lgwr:寫日誌條目,將日誌緩衝區中的日誌條目寫入日誌文件中。lgwer 只有一個工做進程
在如下狀況下會觸發LGWR 進程.1,commit 2.logbuffer 三分之一滿。3.檢查點發生時,先於dbwr寫入日誌文件 四、時間到達3秒
ckpt:生成檢查點,通知dbwr寫入髒塊 檢查點有三種
徹底檢查點:保證數據庫一致性
增量檢查點:不斷更新控制文件中的檢查點位置,當發生實例崩潰時,能夠儘可能縮短實例恢復的時間。
局部檢查點:特定的操做下針對某個空間
arcn 歸檔當前日誌:歸檔模式下,把當前日誌組的內容寫入歸檔日誌,做爲歷史日誌提供數據庫的recovery
4 PGA 的基本組件
program global area (程序全局區)的做用
緩存來自服務器進程和後臺進程的數據和控制信息
提供排序,hash鏈接
pga在進程建立時被分配,進程終止時被釋放,全部進程的pga之和構成了pga的大小 。
pga的結構
sql 工做區:有幾個子區,1.sort area,2.harh area 3,bitmap merge area
做用排序操做,多表鏈接,位圖鏈接,建立位圖
會話空間 session memory
做用:存放logon信息等會話相關的控制信息
私有sql區域
做用:存儲server process 執行sql所須要的私有數據和控制結構,如綁定變量,它包括固定區域和運行是區域
遊標區域 plsql 遊標使用就是這塊區域
5 數據庫的鏈接方式
專用鏈接模式(dedicated )
對於客戶端的每一個user process 服務器端都會出現一個server porcess ,會話與專用服務器之間存在一對一的映射。
專用鏈接的pga的古漢麗方式是私有的。oracle 缺省採用專用鏈接模式
共享鏈接池模式
多個user process 共享一個server process
共享服務器其實是一種鏈接池機制,鏈接池能夠重用已有的超時鏈接,服務器與其餘活動火花,單容易產生鎖等待,此種鏈接方式如今已經不多了
全部的調度進程共享一個公共的請求隊列,可是每一個進程都有本身的響應隊列
在共享服務中會話的UGA 存儲信息是在SGA 中,而不是想專用連接那個在pga中存儲信息,這是的pga的存儲結構爲堆棧空間
駐留池模式
適用於必須維持數據庫的永久連接,結合了專用服務器模式和共享服務器模式的特色,它使用連接代理,而不是專用服務器鏈接客戶機到數據庫,優勢是能夠用不多的內存
處理大量的併發鏈接,特別使用與apache 的php 應用環境