徹底弄懂oracle硬解析、軟解析、軟軟解析
硬解析和軟解析有相同的一步,而軟軟解析與硬解析、軟解析完全不一樣。先來說下理論上的東西,然後來做個實驗。
硬解析過程:
1.語法、語義及許可權檢查;
2.查詢轉換(透過應用各種不同的轉換技巧,會生成語義上等同的新的SQL語句,如count(1)會轉為count(*));
3.根據統計資訊生成執行計劃(找出成本最低的路徑,這一步比較耗時);
4.將遊標資訊(執行計劃)儲存到庫快取。
軟解析過程:
1.語法、語義及許可權檢查;
2.將整條SQL hash後從庫快取中執行計劃。
軟解析對比硬解析省了三個步驟。
軟軟解析過程:
要完全理解軟軟解析先要理解遊標的概念,當執行SQL時,首先要開啟遊標,執行完成後,要關閉遊標,遊標可以理解為SQL語句的一個控制程式碼。
在執行軟軟解析之前,首先要進行軟解析,MOS上說執行3次的SQL語句會把遊標快取到PGA,這個遊標一直開著,當再有相同的SQL執行時,則跳過解析的所有過程直接去取執行計劃。
SQL> drop table test purge;
SQL> alter system flush shared_pool;
SQL> create table test as select * from dba_objects where 1<>1;
SQL> exec dbms_stats.gather_table_stats(user,'test');
硬解析:
SQL> select * from test where object_id=20;
未選定行
SQL> select * from test where object_id=30;
未選定行
SQL> select * from test where object_id=40;
未選定行
SQL> select * from test where object_id=50;
未選定行
軟解析:
SQL> var oid number;
SQL> exec :oid:=20;
SQL> select * from test where object_id=:oid;
未選定行
SQL> exec :oid:=30;
SQL> select * from test where object_id=:oid;
未選定行
SQL> exec :oid:=40;
SQL> select * from test where object_id=:oid;
未選定行
SQL> exec :oid:=50;
SQL> select * from test where object_id=:oid;
未選定行
軟軟解析:
SQL> begin
for i in 1..4 loop
execute immediate 'select * from test where object_id=:i' using i;
end loop;
end;
/
SQL> col sql_text format a40
SQL> select sql_text,s.PARSE_CALLS,loads,executions from v$sql s
where sql_text like 'select * from test where object_id%'
order by 1,2,3,4;
SQL_TEXT PARSE_CALLS LOADS EXECUTIONS
---------------------------------------- ----------- ---------- ----------
select * from test where object_id=20 1 1 1
select * from test where object_id=30 1 1 1
select * from test where object_id=40 1 1 1
select * from test where object_id=50 1 1 1
select * from test where object_id=:i 1 1 4
select * from test where object_id=:oid 4 1 4
可以看到軟解析與軟軟解析相比,軟軟解析只是解析一次。
欄位解釋:
PARSE_CALLS 解析的次數
LOADS 硬解析的次數
EXECUTIONS 執行的次數
SQL執行過程圖如下:
參考文章:http://blog.csdn.net/stevendbaguo/article/details/17267161
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29802484/viewspace-2147442/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- ORACLE 硬解析和軟解析 軟軟解析Oracle
- Oracle 硬解析與軟解析Oracle
- Oracle中的遊標、硬解析、軟解析、軟軟解析、解析失敗Oracle
- Oracle的硬解析和軟解析Oracle
- ORACLE SQL解析之硬解析和軟解析OracleSQL
- 軟解析和硬解析
- Oracle SQL的硬解析和軟解析OracleSQL
- ORACLE的軟 軟 軟 解析!Oracle
- Oracle的軟解析(soft prase)和硬解析(hard prase)Oracle
- SQL大致流程、SPM、軟軟、軟、硬解析SQL
- 草稿 - 遊標,硬解析,軟解析 等
- soft parse(軟解析),hard parse(硬解析)
- 在oracle 10.2.0.5分析硬解析及軟解析及軟軟解析獲取shared pool latch機制系列五Oracle
- oracle實驗記錄 (分析oracle硬解析&軟解析&fast soft parse)OracleAST
- 軟解析、硬解析的一個小測試
- 共享池之八:軟解析、硬解析、軟軟解析 詳解一條SQL在library cache中解析涉及的鎖SQL
- oracle實驗記錄 (分析oracle硬解析&軟解析&fast soft parse(2))OracleAST
- Oracle - 共享遊標、父子游標、硬軟解析Oracle
- 硬解析物理讀VS軟解析邏輯讀 測試
- 【體系結構】sql語句解析過程小實驗 軟解析、硬解析SQL
- 硬解析和物理讀取與軟解析和邏輯讀取
- 關於軟解析(soft parse)與硬解析(hard parse),以及session cached cursors (asktom)Session
- 父遊標 子游標和軟硬解析記載-02
- 深入解析Laravel的中介軟體Laravel
- 【軟考之線性表解析】
- 解析軟體專案管理(轉)專案管理
- 專案管理軟體功能全解析專案管理
- 解析訊息中介軟體之RabbitMQMQ
- 軟體測試面試過程解析面試
- 等待模擬-library cache 軟解析
- 遊標引數shared_cached_cursors和軟軟解析
- Koa 系列 —— Koa 中介軟體機制解析
- 中介軟體的引數解析過程
- Android 軟鍵盤響應事件解析Android事件
- Linux 核心的軟中斷深入解析Linux
- 【專題】深入解析軟體測試外包
- CATIA軟體許可型別全解析型別
- 嵌入式軟體靜態解析工具