一般來說,資料庫處理SQL都會經過三個過程:解析(parse)、執行(exec)、返回結果(fetch)
1.解析
當使用者發起一個SQL語句時,Oracle通過Server Process 接收SQL語句到達oracle執行個體,並在Shared pool 中的 Library Cache 尋找是否存在該語句對應執行計畫的緩衝。
如果不存在則將該SQL進行硬解析(Hard parse),產生最佳化的執行計畫(plan),並將該執行計畫等資訊載入Library Cache。
如果存在則不經過硬解析,而是直接進行軟解析(Soft parse),從而減少資料庫的分析時間。
2.執行
server process首先在buffer cache中尋找是否存在該執行計畫所對應的資料區塊,如果存在,就直接進行DML操作(邏輯IO),否則應從資料檔案中將資料區塊讀取到buffer cache中,再進行DML操作(物理IO)。
3.返回結果
對於SELECT語句需要返回結果,首先看是否需要排序,如果需要則排序後返回給使用者。
對於其他DML語句(insert/delete/update),則無需返回結果。當buffer cache中的資料區塊被修改時,server process將自動記錄buffer的改變過程到SGA中的redo log buffer,最終分別由DBWR和LGWR進程負責將buffer cache中的髒資料區塊和redo log buffer中的日誌寫到磁碟中的data file和redo log file。
解析類型:硬解析、軟解析、軟軟解析
對SQL的解析都需要頻繁地訪問資料字典
硬解析:
判斷SQL語句是否存在文法、語義的問題
判斷SQL語句所涉及的對象(表、視圖)是否存在
判斷執行SQL語句的使用者對涉及的對象是否有許可權
選擇最優的執行方案,產生執行計畫
其中產生執行計畫最消耗系統資源(CPU、I/O、Memory),尤其是CPU和I/O資源
軟解析:只判斷SQL語句的文法、語義、對象許可權,而不產生執行計畫
軟軟解析:不解析
SQL> select name,value from v$sysstat where name like 'parse%' ;
NAME VALUE
------------------------------ ----------
parse time cpu 1339
parse time elapsed 17374
parse count (total) 23639
parse count (hard) 3060
parse count (failures) 149
parse count (describe) 9
Oracle體繫結構系列相關文章:
Oracle體繫結構之SCN、執行個體恢複
Oracle體繫結構之檢查點
Oracle體繫結構之SQL語句的執行過程
更多詳情見請繼續閱讀下一頁的精彩內容: