日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

Oracle SQL语句执行步骤

發(fā)布時間:2025/3/8 数据库 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Oracle SQL语句执行步骤 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

OracleSQL語句執(zhí)行過程中,Oracle內(nèi)部解析原理如下:

1、當(dāng)一用戶第一次提交一個SQL表達(dá)式時,Oracle會將這SQL進(jìn)行Hard parse,這過程有點像程序編譯,檢查語法、表名、字段名等相關(guān)信息(如下圖),這過程會花比較長的時間,因為它要分析語句的語法與語義。然后獲得最優(yōu)化后的執(zhí)行計劃(sql plan),并在內(nèi)存中分配一定的空間保存該語句與對應(yīng)的執(zhí)行計劃等信息。

2、當(dāng)用戶第二次請求或多次請求時,Oracle會自動找到先前的語句與執(zhí)行計劃,而不會進(jìn)行Hard parse,而是直接進(jìn)行Soft parse(把語句對應(yīng)的執(zhí)行計劃調(diào)出,然后執(zhí)行),從而減少數(shù)據(jù)庫的分析時間。

注意的是:Oracle中只能完全相同的語句,包大小寫、空格、換行都要求一樣時,才會重復(fù)使用以前的分析結(jié)果與執(zhí)行計劃。

分析過程如下圖:

對于大量的、頻繁訪問的SQL語句,如果不采用Bind 變量的方式,哪Oracle會花費(fèi)大量的Shared latchCPU在做Hard parse處理,所以,要盡量提高語句的重用率,減少語句的分析時間,通過了解Oracle SQL語句的分析過程可以明白Oracle的內(nèi)部處理邏輯,并在設(shè)計與實現(xiàn)上避免。

在用JDBC或其它持久化數(shù)據(jù)(Hibernate,JDO)操作時,盡量用占位符(?)

??

ORACLE sql 的處理過程大致如下:
1.
運(yùn)用HASH算法,得到一個HASH值,這個值可以通過V$SQLAREA.HASH_VALUE 查看
2.
shared pool 中的 library cache 中查找是否有相同的HASH值,如果存在,則無需硬解析,進(jìn)行軟解析
3.
如果shared pool不存在此HASH值,則進(jìn)行語法檢查,查看是否有語法錯誤
4.
如果沒有語法錯誤,就進(jìn)行語義檢查,檢查該SQL引用的對象是否存在,該用戶是否具有訪問該對象的權(quán)限
5.
如果沒有語義錯誤,對該SQL進(jìn)行解析,生成解析樹,執(zhí)行計劃
6.
生成ORACLE能運(yùn)行的二進(jìn)制代碼,運(yùn)行該代碼并且返回結(jié)果給用戶
硬解析和軟解析都在第5步進(jìn)行
硬解析通常是昂貴的操作,大約占整個SQL執(zhí)行的70%左右的時間,硬解析會生成執(zhí)行樹,執(zhí)行計劃,等等。
當(dāng)再次執(zhí)行同一條SQL語句的時候,由于發(fā)現(xiàn)library cache中有相同的HASH值,這個時候不會硬解析,而會軟解析,
那么軟解析究竟是干了什么呢?其實軟解析就是跳過了生成解析樹,生成執(zhí)行計劃這個耗時又耗CPU的操作,直接利用生成的執(zhí)行計劃運(yùn)行
SQL語句。
下面摘抄eygle深入解析ORACLE 中關(guān)于SQL執(zhí)行過程的描述
? 1.
首先獲得library cache latch,根據(jù)SQLHASH_VALUElibrary cache中查找是否存在此HASH_VALUE,如果找到這個HASH_VALUE,稱之為軟解析,Server獲得改SQL執(zhí)行計劃轉(zhuǎn)向第4步,如果找不到共享代碼就進(jìn)行硬解析。
? 2.
釋放library pool cache,獲得shared pool latch,查找并鎖定自由空間(bucket 中查找chunk)。如果找不到,報ORA-04031錯誤
? 3.
釋放shared pool latch,重新獲得library cache latch,SQL執(zhí)行計劃放入library cache中。
? 4.
釋放library cache latch,保持null模式的library cache pin/lock.
? 5.
開始執(zhí)行。
Library cache latch
可以理解為硬/軟解析的時候發(fā)生的,因為解析的時候會搜索library cache,所以會產(chǎn)生library cache latch
Library cache pin
是在執(zhí)行的階段發(fā)生的。

?

總結(jié)

以上是生活随笔為你收集整理的Oracle SQL语句执行步骤的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。