【一】實例與數據庫
1.1 Oracle 基礎架構及應用環境
1.1.1 Oracle Server的基本結構
1)oracle server: +
2):data file、control file、redolog file
3): an access a
4)oracle memory: sga + pga
5):sga + process
1.1.2 系統全局區SGA:
1)在一個只有一個sga;
2)sga為所有session共享,隨著啟動而分配;
3) down,sga被釋放。
1.2 SGA的基本組件
1)shared pool
共享池是對SQL、PL/SQL程序進行語法分析、編譯、執行的內存區域。
共享池由庫緩存(library cache)和數據字典緩存(data cache)以及結果緩存(result cache)等組成。共享池的大小直接影響數據庫的性能。
關于shared pool中的幾個概念:
① library cache:
sql和plsql的解析場所,存放sql/plsql語句代碼,以及它們的執行計劃,以備其他用戶共享。
② data cache
存放重要的數據字典信息,以備其他用戶共享使用。
③ server result cache:
存放服務器端的SQL結果集及PL/SQL函數返回值。
④ User Global Area (UGA):
共享服務器連接模式下如果沒有配置large pool,則UGA屬于SGA的shared pool, 專用連接模式時UGA屬于PGA。
2) buffer cache(PPT-II-328)
用于存儲從磁盤數據文件中讀入的數據,為所有用戶共享。
服務器進程(server process)負責將數據文件的數據從磁盤讀入到數據緩沖區中,當后續的請求需要這些數據時如果在內存中找到,則不需要再從磁盤讀取。
數據緩沖區中被修改的數據塊(臟塊)由后臺進程DBWR將其寫入磁盤,數據緩沖區的大小對數據庫的讀取速度有直接的影響。
要弄明白 Buffer Cache中的幾個cache概念:
① Buffer pool=(default pool)+( pool)
其中:
default pool(參數)是標準塊存放的內存空間大小,SGA自動管理時此參數不用設置,使用LRU算法清理空間:
pool:對應的參數有:
db_nk_cache_size: 指定非標準塊大小內存空間,比如2k、4k、16k、32k。
db_keep_cache_size: 存放經常訪問的小表或索引等。
db_recycle_cache_size: 與keep相反,存放偶爾做全表掃描的大表的數據。
①如何指定使用某個表調入 pool
SQL> alter table scott.emp1 storage(buffer_pool keep);
SQL> select segment_name,buffer_pool from dba_segments where segment_name='EMP1';
②default pool對應的參數是與標準塊default block是配套的日志記錄緩沖區多大好,如果default block是8k, 這個參數將代替。
③如果要建立非標準塊的表空間,先前要設定db buffer中的與之對應的參數。
第一步,先指定db buffer里的16k cache空間大小
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
以日志條目(redo entries)方式記錄了數據庫的所有修改信息(包括DML和DDL),目的是為數據庫恢復,日志條目首先產生于日志緩沖區,日志緩沖區較小,一般缺省值在3M-15M之間,它是以字節為單位的。
日志緩沖區的大小啟動后就是固定不變的,如要調整只能通過修改參數文件后重新啟動生效,不能動態修改!不能由SGA自動管理!
4)large pool(可選)
為了進行大的后臺批處理操作而分配的內存空間,主要用于共享服務器的session memory(UGA),RMAN備份恢復以及并行查詢等操作,有助于降低shared pool碎片。
5)java pool(可選)
為了java虛擬機及應用而分配的內存空間,包含所有session指定的JAVA代碼和數據。
6)stream pool(可選)
為了stream process而分配的內存空間。stream技術是為了在不同數據庫之間共享數據,因此,它只對使用了stream數據庫特性的系統是重要的。
1.3 Oracle的進程:
1)user process:
客戶端的process,訪問數據庫分為三種形式:
① sql*plus
② 應用程序
③ web方式(EM)
①sql*plus可以執行sql和plsql請求,是典型的客戶端進程。
linux作為客戶端:可以使用ps看到sqlplus關鍵字:
$ ps -ef |grep sqlplus
windows作為客戶端,可以通過查看任務管理器看到sqlplus用戶進程:
C:\Documents and Settings\prod>sqlplus sys/system@ as sysdba
②應用程序
例如:通過java程序直接嵌套sql語句,或調用Oracle存儲過程。
③web方式
例如:使用OEM登錄、管理數據庫。
$emctl start dbconsole
2)server process:
服務器端的進程,user process不能直接訪問Oracle日志記錄緩沖區多大好,必須通過相應的server process訪問實例,進而訪問數據庫。
[oracle@prod ~]$ ps -ef |grep LOCAL
在linux下看到的server process, (LOCAL=YES)是本地連接,(LOCAL=NO)是遠程連接。
可以在oracle查看V$process視圖,它包括了當前所有的后臺進程和服務器進程。
SQL> select pid,program,background from v$process;
字段為1是 process,其余都是server process
3) process
基本的后臺進程有
1)smon:系統監控進程
①當實例崩潰之后,Oracle會自動恢復實例。
②釋放不再使用的臨時段。
2)pmon:進程監控
①當user process失敗時,清理出現故障的進程,釋放所有當前掛起的鎖定,釋放服務器端使用的資源;
②監控空閑會話是否到達閾值;
③動態注冊監聽。
3)dbwn: 數據寫入進程
1、將變更的數據緩沖區的臟buffer寫入數據文件中。
2、釋放數據緩沖區空間。
3、觸發條件:
①ckpt發生
② 臟塊太多時(閾值)
③自由空間不夠時
④表空間read only/offline/backup模式等
以上4個狀況之一發生時,dbwn都會被觸發。
4)lgwr:寫日志條目
1、將日志緩沖區中的日志條目寫入日志文件;
2、不像DBWR可以有多個進程并行工作,LGWR只有一個工作進程;
3、觸發條件:
① commit
②online redo switch
② 3秒
④三分之一滿(或1M滿)
⑤先于dbwr寫(先記后寫,必須在dbwr寫臟塊之前寫入日志,保證未提交數據都能回滾)
以上5個狀況之一發生時, lgwr都會記日志fast commit和group commit
第一個事務commit時發生寫日志的動作,在這個過程中如果又有其他事務也commit,則等到第一個事務寫日志完成后,其他事務以group commit的方式一次性一起commit寫日志。
5)ckpt:生成檢查點
作用:通知或督促dbwr寫臟塊。
1、完全檢查點:保證數據庫的一致性。
2、增量檢查點:不斷更新控制文件中的檢查點位置,當發生實例崩潰時,可以盡量縮短實例恢復的時間。
3、局部檢查點:特定的操作下,如針對某個表空間read only/offline、Shrink 數據文件、ALTER BEGIN BACKUP等 。
6)arcn:歸檔當前日志
歸檔模式下,發生日志切換時,把當前日志組中的內容寫入歸檔日志,作為歷史日志提供數據庫的。
1.4 PGA的基本組件
1)程序全局區(Program Global Area)的作用
①緩存來自服務器進程和后臺進程的數據和控制信息;
② 提供排序、hash連接;
③ 不提供session之間的共享;
④ PGA在進程創建時被分配,進程終止時被釋放,所有進程的PGA之和構成了PGA的大小;
PGA的管理是比較復雜的,9i后,Oracle推薦使用PGA自動管理,屏蔽了PGA的復雜性。
2)PGA的結構:
①SQL工作區(SQL Work Area): 有幾個子區 1、Sort Area, 2、Harh Area 3、Bitmap Merge Area
作用:排序操作(order by/group by//union等),多表hash連接,位圖連接,創建位圖
②會話空間(Session Memory)
作用:存放logon信息等會話相關的控制信息
③私有SQL區域(Private SQL Area)
作用:存儲server process執行SQL所需要的私有數據和控制結構,如綁定變量,它包括固定區域和運行時區域
③ 游標區域(Cursor Area):PLSQL游標使用的就是這塊區域。
1.5連接方式
1)專用連接模式()
對于客戶端的每個user process,服務器端都會出現一個server process,會話與專用服務器之間存在一對一的映射(一根繩上的兩個螞蚱)。
專用連接的PGA的管理方式是私有的,Oracle缺省采用專用連接模式。
2)共享連接模式(shared)
多個user process共享一個server process。
① 共享服務器實際上就是一種連接池機制(),連接池可以重用已有的超時連接,服務于其它活動會話,但容易產生鎖等待,此種連接方式現在已經很少見了。
②所有調度進程()共享一個公共的請求隊列( queue),但是每個調度進程都有與自己響應的隊列( queue)。
③在共享服務器中會話的(UGA)存儲信息是在SGA中的,而不像專用連接那樣在PGA中存儲信息,這時的PGA(非UGA部分))的存儲結構為堆棧空間。
3)駐留連接池模式( pooling,簡稱DRCP):
適用于必須維持數據庫的永久連接,結合了專用服務器模式和共享服務器模式的特點,它使用連接代理(而不是專用服務器)連接客戶機到數據庫,優點是可以用很少的內存處理大量并發連接(11g新特性,特別適用于Apache的PHP應用環境)。
the end !!!
@jackman 共筑美好!