1、oracle總體體系結構
一、oracle總體分爲數據庫軟件(oracle_home)和數據庫文件(oradata)兩部分。
ctl:記錄數據庫物理結構,當前運行的狀態信息;
dbf:數據文件,記錄數據庫對象;
log:記錄數據文件中每一個數據塊的變化過程;
二、數據庫實例包括(內存空間和數據庫進程),經過實例鏈接訪問數據庫
內存包括:
SGA:shared pool:緩存sql語句及sql語句的執行計劃
buffer cache:緩存從dbf讀取的數據塊
redo log buffer:存儲server process修改數據塊產生的日誌
java pool:用於JVM等Java選件
lage pool:用於共享服務器模式(MTS)、 並行計算或RMAN的備份恢復等操做。
stream pool:爲Oracle的Streams功能所使用
PGA: Server Process的私有內存空間
進程包括:
後臺進程:smon:系統監控進程,維護數據庫實例如內存碎片整理
pmon:用戶進程維護,清理死掉的進程回收進程空間
dbwr:將buffer cache中的髒塊寫入dbf
lgwr:將redo log buffer中的日誌寫入redo log
ckpt:週期性運行,縮短checkpoint queue隊列,更新控制文件和數據文件頭部檢查點信息
arch:負責將寫滿的日誌組轉存歸檔
前臺進程:server process:負責接收sql語句,帶着sql語句在SGA中執行,讀入dbf塊到buffer cache,將修改日誌寫入
redo log buffer,將數據庫處理結果返回給客戶端。
相關查詢命令:
ipcs #輸出系統共享內存,信息隊列,遮斷器信息
ps -ef | grep ora #查看含有ora字符的進程信息
iostat #輸出CPU使用分配和磁盤IO狀況
vmstat #輸出進程,內存,IO,CPU狀態信息
三、一條sql語句執行過程
客戶端發起一條sql語句,數據庫實例啓動一個server process接收sql語句,接收後帶着sql語句先到shared pool中尋找對應sql語句
及執行計劃,找到則執行,未找到對sql語句進行解析(語法,訪問對象是否存在,是否具備權限,篩選最優的執行計劃);肯定sql語句的
執行計劃後到buffer cache中找sql語句訪問的數據,若是buffer cache中存在直接調用處理,不存在,server process去dbf中找數據並讀
入buffer cache,對buffer cache的塊進行處理,處理日誌寫入redo log buffer,lgwr負責將redo log buffer中的日誌寫入redo log中。
處理完後server process將處理結果返給客戶端;dbwr進程負責將buffer cache中的髒塊寫入dbf。
四、oracle數據的鏈接機制
客戶端鏈接應用服務,應用服務啓動的時候會創建應用與數據庫的許多鏈接(鏈接池),數據庫實例對每個鏈接啓動server process
進程,客戶端選一個鏈接將sql語句傳給數據庫,數據庫的server process就接收sql語句,帶着sql語句執行。java
五、oracle10g自動共享內存管理(Automatic Shared Memory Management)
Oracle10g自動共享內存管理(ASMM),使用新參數SGA_TARGET 指出SGA內存分配總大小便可,不須要定義SHAR_POOL_SIZE DB_CACHE_SIZE
等參數,數據庫服務器會自動根據須要動態分配。 注意若是沒有sga_target,則自動共享內存管理功能被禁止,仍然能夠設置每一個參數。在設
置了SGA_TARGET 後,其餘參數默認設置爲0。也能夠手動設置各個組件的最小值。
手動內存管理轉到自動內存管理,根據系統狀況計算出SGA_TARGET和SGA_MAX_SIZE的值,要增長參數SGA_TARGET和SGA_MAX_SIZE的大
小設置,去掉參數文件中各個組件的大小定義。初始化參數statistics_level必須設置爲typical或all才能啓動ASMM,不然若是設置爲
basic,則關閉ASMM。日誌緩衝區,log buffer,keep buffer cache不受自動內存調整的影響,仍須要手動設置。oracle按期捕獲系統狀
態,將內存分給須要的對象,經過spfile,啓動時恢復上次關閉時的分配狀況。適合使用與系統資源比較充足的環境下在資源緊缺系統
會出現SGA抖動,可配合手動設置各池最小值,
查詢SGA抖動狀況:
select component,oper_type, oper_mode, start_time, end_time, trunc(target_size/1024/1024) target
from v$sga_resize_ops;linux
參考資料:
http://www.linuxidc.com/Linux/2011-08/40041.htmios