首先看張圖
我們來引入第一個概念,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 模式時自動歸檔聯機重做日志 • 保留數據庫的全部更改記錄 |
發起連接的應用程序或工具通常稱為用戶進程,連接發起后,oracle服務器就會創建一個進程來接受連接,這個進程就成為服務進程,服務器進程代表用戶進程與oracle實例進行通信,在專用服務器連接模式下,用戶進程和服務進程是1對1的關系,在共享服務器模式下,多個用戶進程可能共享一個服務進程。
當服務器進程開始和oracle實例進行通信時,一個會話就被創建了。
顯然處理一個查詢要經過語法分析,綁定,執行,提取等階段。