sql執行過程分析
我們總是寫sql語句,資料庫把結果返回給我們,那中間過程又是什麼?如果瞭解oracle是怎麼執行sql語句的中間過程,對我們優化sql有很大的幫助
首先了解一下執行sql,需要消耗什麼資源,
cpu,
記憶體,
io,
我們要了解什麼情況下會消耗cpu,什麼情況下消耗記憶體,什麼情況下消耗io,只有瞭解了這些,我們才能
有針對性的優化,如果oracle的瓶頸在記憶體上,就要通過一定的手段(可以檢視awr報告,也可以直接查詢oracle統計表)去找出最消耗記憶體的sql語句來優化,
是select出來的無用欄位太多了,還是表之間的關聯太多了,還是無效的排序太多了,這都是消耗記憶體的操作,只有瞭解什麼操作是消耗記憶體的,才能有針對性
的優化
在瞭解sql過程之前,我們有必要了解一些概念:
硬解析,
軟解析,
物理讀,
邏輯讀,
buffer
父遊標
子游標
下面我們來詳細瞭解一下sql語句從客戶端發起,到資料庫服務端返回資料,中間到底發生了什麼事情,我們以select username from tbuser為例
實驗環境:oracle 專用伺服器模式
oracle要判斷語法是否正確
查詢的表(tbuser)是否存在
當前使用者是否有許可權使用該表
select出的欄位username是否存在
以上條件只要有一個失敗,就會中止查詢
上面的判斷都是在pga中進行的,如果判斷都正確的話,就會進入到sga中查詢該語句是否在sga的share pool中存在,如果存在,則說明該語句曾經執行過,oracle會充分利用該資源,
oracle判斷sql是否相同,是通過把sql轉換為asc碼來比較的,所以說,如果語句中大小寫不相同,或者多一個空格,少一個空格,oracle都會認為不一樣,重新解析該sql語句
比如:select username from tbuser和select userName from tbuser就是不一樣的sql語句,oracle會解析倆次,不能充分共享sql語句,會造成硬解析太多,效能下降
如果要執行的sql語句在share pool中已經存在,就可以共享該語句的父遊標了,那能不能共享子游標呢,還不一定
待續。。。
相關文章
- sql 執行過程SQL
- mybatis-spring sql執行過程分析MyBatisSpringSQL
- HiveSQL的執行過程分析HiveSQL
- [20170703]SQL語句分析執行過程.txtSQL
- 一條Sql的執行過程SQL
- mysql執行sql語句過程MySql
- Mybatis原始碼分析(五)探究SQL語句的執行過程MyBatis原始碼SQL
- MYSQL sql執行過程的一些跟蹤分析(一)MySql
- 精盡MyBatis原始碼分析 - SQL執行過程(三)之 ResultSetHandlerMyBatis原始碼SQL
- 精盡MyBatis原始碼分析 - SQL執行過程(一)之 ExecutorMyBatis原始碼SQL
- 精盡MyBatis原始碼分析 - SQL執行過程(二)之 StatementHandlerMyBatis原始碼SQL
- Informix 執行緒sleep 分析過程ORM執行緒
- SQL語句執行過程詳解SQL
- CoreData執行過程的sql語句SQL
- sql語句執行過程小結SQL
- 剖析SQL語句的執行過程SQL
- Oracle SQL 語句的執行過程OracleSQL
- 原始碼分析OKHttp的執行過程原始碼HTTP
- crtmpserver 執行過程簡明分析Server
- knockout原始碼分析之執行過程原始碼
- Mapreduce(二):MR的執行過程分析
- 【SQL】Oracle避免動態SQL,提高過程執行效率SQLOracle
- 一條sql語句的執行過程SQL
- 一條 sql 的執行過程詳解SQL
- MySQL 中一條 sql 的執行過程MySql
- 淺談SQL語句的執行過程SQL
- 10_SQL語句執行過程剖析SQL
- 理解oracle執行sql語句的過程OracleSQL
- ORACLE sql 語句的執行過程(SQL效能調整)OracleSQL
- maven外掛執行過程中自動執行sql檔案MavenSQL
- Java 執行緒池的建立過程分析Java執行緒
- Oracle資料庫SQL語句執行過程Oracle資料庫SQL
- [MSSQL]sql 儲存過程定時執行方法SQL儲存過程
- GaussDB SQL查詢語句執行過程解析SQL
- 精盡MyBatis原始碼分析 - SQL執行過程(四)之延遲載入MyBatis原始碼SQL
- laravel 應用層執行過程原始碼分析Laravel原始碼
- PostgreSQL的insert語句執行過程分析SQL
- 程式執行過程記憶體分析詳解記憶體