ORACLE SQL執行步驟

2021-05-10 13:51:52 字數 1481 閱讀 5125

以前理解的

oracle sql 的處理過程大致如下:

1.運用hash演算法,得到乙個hash值,這個值可以通過v$sqlarea.hash_value 檢視

2.到shared pool 中的 library cache 中查詢是否有相同的hash值,如果存在,則無需硬解析,進行軟解析

3.如果shared pool不存在此hash值,則進行語法檢查,檢視是否有語法錯誤

4.如果沒有語法錯誤,就進行語義檢查,檢查該sql引用的物件是否存在,該使用者是否具有訪問該物件的許可權

5.如果沒有語義錯誤,對該sql進行解析,生成解析樹,執行計畫

6.生成oracle能執行的二進位制**,執行該**並且返回結果給使用者

硬解析和軟解析都在第5步進行

硬解析通常是昂貴的操作,大約佔整個sql執行的70%左右的時間,硬解析會生成執行樹,執行計畫,等等。

當再次執行同一條sql語句的時候,由於發現library cache中有相同的hash值,這個時候不會硬解析,而會軟解析,

那麼軟解析究竟是幹了什麼呢?其實軟解析就是跳過了生成解析樹,生成執行計畫這個耗時又耗cpu的操作,直接利用生成的執行計畫執行

該sql語句。

下面摘抄eygle深入解析oracle 中關於sql執行過程的描述

1.首先獲得library cache latch,根據sql的hash_value在library cache中查詢是否存在此hash_value,如果找到這個hash_value,稱之為軟解析,server獲得改sql執行計畫轉向第4步,如果找不到共享**就進行硬解析。

2.釋放library pool cache,獲得shared pool latch,查詢並鎖定自由空間(在bucket 中查詢chunk)。如果找不到,報ora-04031錯誤

3.釋放shared pool latch,重新獲得library cache latch,將sql執行計畫放入library cache中。

4.釋放library cache latch,保持null模式的library cache pin/lock.

5.開始執行。

library cache latch可以理解為硬/軟解析的時候發生的,因為解析的時候會搜尋library cache,所以會產生library cache latch

library cache pin 是在執行的階段發生的。

現在理解的

1.語法檢查

2.語義檢查(檢查執行該sql語句的使用者是否有許可權訪問某個物件) 

3.檢查該sql是否存在於共享池

4.如果sql語句不存在就對該sql進行硬解析,生成執行計畫,解析樹等等,如果sql語句存在,就選擇最佳執行計畫,這個就是軟解析

5.生成oracle能執行的二進位制**,返回結果

以前以為一條sql語句的執行,會首先對他進行hash運算,後來發現錯了,一條sql語句的執行首先會在pga中進行語法檢查,語義檢查

步驟1,2都是在pga中完成的. 

Oracle SQL語句執行步驟

oracle中sql語句執行過程中,oracle內部解析原理如下 1 當一使用者第一次提交乙個sql表示式時,oracle會將這sql進行hard parse,這過程有點像程式編譯,檢查語法 表名 欄位名等相關資訊 如下圖 這過程會花比較長的時間,因為它要分析語句的語法與語義。然後獲得最優化後的執行...

Oracle sql執行順序

1.選擇最有效率的表名順序 只在基於規則的優化器中有效 oracle的解析器按照從右到左的順序處理from子句中的表名,因此from子句中寫在最後的表 基礎表 driving table 將被最先處理.在from子句中包含多個表的情況下,你必須選擇記錄條數最少的表作為基礎表.當oracle處理多個表...

Oracle sql執行過程

每種型別的語句都要執行的全過程 1 create a cursor 建立游標 2 parse the statement 分析語句 5 bind any variables 繫結變數 7 run the statement 執行語句 9 close the cursor 關閉游標 如果使用了並行功能...