【T-SQL進階】02.理解SQL查詢的底層原理


本系列【T-SQL】主要是針對T-SQL的總結。

一、SQL Server組成部分

1.關系引擎:主要作用是優化和執行查詢。

包含三大組件:

(1)命令解析器:檢查語法和轉換查詢樹。

(2)查詢優化器:優化查詢。

(3)查詢執行器:負責執行查詢。

2.存儲引擎:管理所有數據及涉及的IO

包含三大組件:

(1)事務管理器:通過鎖來管理數據及維持事務的ACID屬性。

(2)數據訪問方法:處理對行、索引、頁、行版本、空間分配等的I/O請求。

(3)緩沖區管理器:管理SQL Server的主要內存消耗組件Buffer Pool。

3.Buffer Pool

包含SQL Server的所有緩存。如計划緩存和數據緩存。

4.事務日志

記錄事務的所有更改。保證事務ACID屬性的重要組件。

5.數據文件

數據庫的物理存儲文件。

6.SQL Server網絡接口

建立在客戶端和服務器之間的網絡連接的協議層

二、查詢的底層原理

1.當客戶端執行一條T-SQL語句給SQL Server服務器時,會首先到達服務器的網絡接口,網絡接口和客戶端之間有協議層。

2.客戶端和網絡接口之間建立連接。使用稱為“表格格式數據流”(TDS) 數據包的 Microsoft 通信格式來格式化通信數據。

3.客戶端發送TDS包給協議層。協議層接收到TDS包后,解壓並分析包里面包含了什么請求。

4.命令解析器解析T-SQL語句。命令解析器會做下面幾件事情:

(1)檢查語法。發現有語法錯誤就返回給客戶端。下面的步驟不執行。

(2)檢查緩沖池(Buffer Pool)中是否存在一個對應該T-SQL語句的執行計划緩存。

(3)如果找到已緩存的執行計划,就從執行計划緩存中直接讀取,並傳輸給查詢執行器執行。

(4)如果未找到執行計划緩存,則在查詢執行器中進行優化並產生執行計划,存放到Buffer Pool中。

5.查詢優化器優化SQL語句

當Buffer Pool中沒有該SQL語句的執行計划時,就需要將SQL傳到查詢優化器,通過一定的算法,分析SQL語句,產生一個或多個候選執行計划。選出開銷最小的計划作為最終執行計划。然后將執行計划傳給查詢執行器。

6.查詢執行器執行查詢

查詢執行器把執行計划通過OLE DB接口傳給存儲引擎的數據訪問方法。

7.數據訪問方法生成執行代碼

數據訪問方法將執行計划生成SQL Server可操作數據的代碼,不會實際執行這些代碼,傳送給緩沖區管理器來執行。

8.緩沖區管理器讀取數據。

先在緩沖池的數據緩存中檢查是否存在這些數據,如果存在,就把結果返回給存儲引擎的數據訪問方法;如果不存在,則從磁盤(數據文件)中讀出數據並放入數據緩存中,然后將讀出的數據返回給存儲引擎的數據訪問方法。

9.對於讀取數據,將會申請共享鎖,事務管理器分配共享鎖給讀操作。

10.存儲引擎的數據訪問方法將查詢到的結果返回關系引擎的查詢執行器。

11.查詢執行器將結果返回給協議層。

12.協議層將數據封裝成TDS包,然后協議層將TDS包傳給客戶端。

 

參考資料:

https://msdn.microsoft.com/zh-cn/library/windows/desktop/ms722784(v=vs.85).aspx

《SQL Server 性能優化與管理的藝術》

 

->>【T-SQL】系列文章全文目錄(2017-06-02更新)


作  者: Jackson0714
出  處:http://www.cnblogs.com/jackson0714/
關於作者:專注於微軟平台的項目開發。如有問題或建議,請多多賜教!
版權聲明:本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接。
特此聲明:所有評論和私信都會在第一時間回復。也歡迎園子的大大們指正錯誤,共同進步。或者直接私信
聲援博主:如果您覺得文章對您有幫助,可以點擊文章右下角推薦一下。您的鼓勵是作者堅持原創和持續寫作的最大動力!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM