久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

如何理解oracle硬解析、軟解析、軟軟解析

150次閱讀
沒有評論

共計(jì) 1948 個(gè)字符,預(yù)計(jì)需要花費(fèi) 5 分鐘才能閱讀完成。

如何理解 oracle 硬解析、軟解析、軟軟解析,針對這個(gè)問題,這篇文章詳細(xì)介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡單易行的方法。

硬解析和軟解析有相同的一步,而軟軟解析與硬解析、軟解析完全不一樣。先來說下理論上的東西,然后來做個(gè)實(shí)驗(yàn)。

硬解析過程:

    1. 語法、語義及權(quán)限檢查;

    2. 查詢轉(zhuǎn)換(通過應(yīng)用各種不同的轉(zhuǎn)換技巧,會(huì)生成語義上等同的新的 SQL 語句,如 count(1)會(huì)轉(zhuǎn)為 count(*));

    3. 根據(jù)統(tǒng)計(jì)信息生成執(zhí)行計(jì)劃(找出成本最低的路徑,這一步比較耗時(shí));

    4. 將游標(biāo)信息(執(zhí)行計(jì)劃)保存到庫緩存。

軟解析過程:

    1. 語法、語義及權(quán)限檢查;

    2. 將整條 SQL hash 后從庫緩存中執(zhí)行計(jì)劃。

    軟解析對比硬解析省了三個(gè)步驟。

軟軟解析過程:

    要完全理解軟軟解析先要理解游標(biāo)的概念,當(dāng)執(zhí)行 SQL 時(shí),首先要打開游標(biāo),執(zhí)行完成后,要關(guān)閉游標(biāo),游標(biāo)可以理解為 SQL 語句的一個(gè)句柄。

在執(zhí)行軟軟解析之前,首先要進(jìn)行軟解析,MOS 上說執(zhí)行 3 次的 SQL 語句會(huì)把游標(biāo)緩存到 PGA,這個(gè)游標(biāo)一直開著,當(dāng)再有相同的 SQL 執(zhí)行時(shí),則跳過解析的所有過程直接去取執(zhí)行計(jì)劃。

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   解析的次數(shù)

LOADS 硬解析的次數(shù)

EXECUTIONS 執(zhí)行的次數(shù)

SQL 執(zhí)行過程圖如下:

關(guān)于如何理解 oracle 硬解析、軟解析、軟軟解析問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注丸趣 TV 行業(yè)資訊頻道了解更多相關(guān)知識。

正文完
 
丸趣
版權(quán)聲明:本站原創(chuàng)文章,由 丸趣 2023-07-20發(fā)表,共計(jì)1948字。
轉(zhuǎn)載說明:除特殊說明外本站除技術(shù)相關(guān)以外文章皆由網(wǎng)絡(luò)搜集發(fā)布,轉(zhuǎn)載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 襄城县| 农安县| 沧源| 南陵县| 大埔县| 嘉黎县| 邛崃市| 华池县| 道真| 新乡县| 青岛市| 淮滨县| 富裕县| 丹寨县| 海门市| 延川县| 北京市| 南岸区| 孝昌县| 黄平县| 隆德县| 游戏| 铜川市| 夏津县| 嵊泗县| 卢龙县| 呼图壁县| 上思县| 郁南县| 三穗县| 额济纳旗| 白山市| 常州市| 鹰潭市| 美姑县| 石首市| 四川省| 谢通门县| 集贤县| 宁城县| 康定县|