天天看點

資料庫緩存計劃底層原理

資料庫緩存計劃底層原理
  1. 當用戶端執行一條T-SQL語句給SQL Server伺服器時,會首先到達伺服器的網絡接口,網絡接口和用戶端之間有協定層。
  2. 用戶端和網絡接口之間建立連接配接。使用稱為“表格格式資料流”(TDS) 資料包的 Microsoft 通信格式來格式化通信資料。
  3. 用戶端發送TDS包給協定層。協定層接收到TDS包後,解壓并分析包裡面包含了什麼請求。
  4. 指令解析器解析T-SQL語句。指令解析器會做下面幾件事情:
(1)檢查文法。發現有文法錯誤就傳回給用戶端。下面的步驟不執行。
(2)檢查緩沖池(Buffer Pool)中是否存在一個對應該T-SQL語句的執行計劃緩存。
(3)如果找到已緩存的執行計劃,就從執行計劃緩存中直接讀取,并傳輸給查詢執行器執行。
(4)如果未找到執行計劃緩存,則在查詢執行器中進行優化并産生執行計劃,存放到Buffer Pool中。
  1. 查詢優化器優化SQL語句

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

  2. 查詢執行器執行查詢

    查詢執行器把執行計劃通過OLE DB接口傳給存儲引擎的資料通路方法。

  3. 資料通路方法生成執行代碼

    資料通路方法将執行計劃生成SQL Server可操作資料的代碼,不會實際執行這些代碼,傳送給緩沖區管理器來執行。

  4. 緩沖區管理器讀取資料。

    先在緩沖池的資料緩存中檢查是否存在這些資料,如果存在,就把結果傳回給存儲引擎的資料通路方法;如果不存在,則從磁盤(資料檔案)中讀出資料并放入資料緩存中,然後将讀出的資料傳回給存儲引擎的資料通路方法。

  5. 對于讀取資料,将會申請共享鎖,事務管理器配置設定共享鎖給讀操作。
  6. 存儲引擎的資料通路方法将查詢到的結果傳回關系引擎的查詢執行器。
  7. 查詢執行器将結果傳回給協定層。
  8. 協定層将資料封裝成TDS包,然後協定層将TDS包傳給用戶端。