SQL語句處理過程

2021-08-31 23:04:34 字數 1964 閱讀 9005

sql優化首先了解sql的執行過程

1. sql語句處理過程

open-->parse-->bind-->execute-->fetch-->close

2. sql語句詳細處理過程

dml語句和select查詢語句都會經歷如下過程:

2.1. create a cursor

2.2. parse the statement

2.5. bind aany variables

2.7. run the statement

2.8. close the cursor

可選過程:

2.6. parallelize the statement

select語句,帶有returning的子句的dml語句要求如下處理過程:

2.3. describe results of a query

2.4. define output of a query

2.8. fetch rows of a query

3. 解析

在共享池中是否存在共享的sql,語法檢查,語義檢查,許可權檢查,確定最佳執行計畫。

解析是乙個昂貴的操作,其中生成執行計畫是最耗時的,應該避免重複解析,解析一次,多次執行。

將使用者的sql文字轉換成oracle認識且可執行的語句,這個過程叫做解析過程。

解析分為軟解析和硬解析。

當客戶端發出一條sql語句進入shared pool時,oracle首先將sql文字轉換成ascii字元,然後根據hash函式計算對應的hash_value,然後到library catch中查詢是否存在該sql語句。

如果不存在,進行硬解析,步驟:

(1. 語法檢查。失敗退出解析。

(2. 到資料字典校驗sql語句涉及的物件和列是否都存在。失敗退出解析。

(3. 將物件進行名稱轉換,比如將同名翻譯成實際的物件等。失敗退出解析。

(4. 檢查游標裡使用者是否居有訪問sql語句裡面所引用的物件的許可權。失敗退出解析。

(5. 通過優化器建立最優的執行計畫,這一步是最耗cpu資源的。

(6. 將該游標產生的執行計畫,sql文字等裝載進library cache中。

如果存在,說明該sql以前執行過,於是進行軟解析。軟解析是相對於硬解析而已,如果從硬解析中去掉一些步驟,就是軟解析。軟解析分為三種型別。

(1. 某個sesison發出的sql語句在library catch裡其他session發出的sql語句一致。這是,該解析過程可以將硬解析的5和6步驟去掉,但是仍然要進行硬解析的2,3,4步驟。

(2. 某個sesison發出的sql語句在library catch裡同乙個session發出的sql語句一致。該解析過程可以將硬解析的2,3,5和6步驟去掉,仍然需要4步驟進行許可權檢查,因為可能通過grant改變了該session使用者的許可權。

(3. 當設定了初始化引數session_cached_cursors時,當某個session對相同的cursor進行第三次訪問時,將在該session的pga裡建立乙個標記,並且該游標即使已經關閉也不會從library cache中交換出去。這樣,該session以後再執行相同的sql時,將跳過硬解析的所有步驟。這種情況下是最高效的解析方式,但是將會消耗很大的記憶體。

4. 繫結變數

找到繫結變數,給繫結變數分配值,減少硬解析,從共享執行計畫中獲益。

5. 執行

如果是dml語句,則鎖定修改的行,知道提交和回滾。

如果是查詢語句,則不鎖定任何行。

執行必要的i/o與排序

6. 提取

為查詢和帶有returning子句的dml語句返回行

如果需要,進行排序

使用批量提取改進效能

oracle沒次可以fetch多行,在sql*plus中使用arraysize修改設定。

show arraysize;

set arraysize 100.

一般來講,如果arraysize設定超過100,對效能的改善就沒有任何實際意義了。

Oracle SQL語句處理過程

07年開始,換了一家公司,資料庫使用的是oracle10g,以前一直使用的是informix和msserver,感覺oracle功能還真強大,比informi和msserver都好用多啦,體系結構和管理方式都有了許多變化,但使用兩個月下來,其實資料庫的基本原理是一樣的,現結合以前的工作經驗和學習的資...

USB host處理過程

在usbh core.c中有乙個函式usbh process 這個函式很重要,main 函式每迴圈一次,它就執行一次,它處理所有usb核心狀態的變化,typedef enum host state 根據這個當前狀態 phost gstate 處於以上哪個狀態的不同,做出不同的處理過程。其中最重要的要...

Hadoop map reduce處理過程

1 在hadoop中,每個mapreduce任務都被初始化為乙個job。每個job又可以分成兩個階段 map階段和reduce階段 map函式接受乙個形式的輸入,然後同樣產生乙個形式的中間輸出,hadoop會負責將所有具有相同結果中間key值的value集合到一起傳給reduce函式,reduce函...