標籤:
為了縮小讀取操作所涉及範圍,本文首先著眼於簡單的SELECT查詢,然後引入執行更新操作有關的附加過程。最後你會讀到,最佳化效能時SQLServer使用還原工具的相關術語和流程。
關係和儲存引擎
,SQL Server被分為2個主要引擎:關聯式引擎和儲存引擎。關聯式引擎有時也被稱為查詢處理器,因為它的主要功能是查詢最佳化和執行。它包含檢查查詢文法和準備查詢樹的命令解析器;查詢最佳化工具毫無疑問是任何資料庫系統中皇冠上的寶石;查詢執行器對執行(查詢計劃)負責。
儲存引擎對所有資料輸入、輸出管理負責。它包含用來處理行、索引、頁、分配和行版本等修改的輸入、輸出請求的存取方法;緩衝區管理器,與SQL Server主要記憶體使用者緩衝池打交道。它還包含處理用來維持一致性(ACID)的資料鎖和管理交易記錄的交易管理員。
緩衝池
在進入查詢生命週期之前你需要知道的其它主要組件是緩衝池,在SQL Server中是最大的記憶體使用者。緩衝池裡包含SQL Server中的所有不同緩衝,包括計畫快取和資料緩衝,計畫快取會接在透過它生命週期的查詢後的章節談到。
一個簡單的SELECT查詢
在這個例子中,使用的查詢細節不重要——沒有join的簡單SELECT語句,因為你只是發起一起簡單的讀取請求。從用戶端開始,那裡你首先接觸的組件是SQL Server網路介面(SNI)。
SQL Server網路介面(SNI)
SQL Server網路介面(SNI)是建立用戶端和伺服器端網路連接的協議層。它由資料庫引擎和SQL Server本地客戶(SQL Server Native Client:SNAC)都用到的一系列API組成。SNI代表在SQL Server 2000裡建立的網路程式庫和包含在作業系統裡的微軟資料訪問組件(Microsoft Data Access Components:MDAC)。
SNI不是被直接配置的;你要配置在用戶端和伺服器端的網路通訊協定。SQL Server支援下列協議:
- 共用記憶體(Shared memory)——簡單、快速,共用記憶體是用來串連本地(與SQL Server一樣的電腦)運行用戶端的預設協議。只能用在本地,沒有配置屬性,當從本地機器串連時始終是首次嘗試的。
- TCP/IP——這是最常用於SQL Server的訪問協議。它通過指定IP地址和連接埠號碼使你可以串連到SQL Server。通常,當你指定一個串連執行個體時它會自動發生。你的內部命名解析系統解析執行個體名的主機名稱為IP地址,不管你為預設執行個體串連到預設TCP 1433連接埠還是用SQL瀏覽服務為具名執行個體使用UDP 1434找到正確的連接埠。
- 具名管道(Named Pipes)——TCP/IP和具名管道(Named Pipes)是在架構裡被使用的相容協議。具名管道(Named Pipes)被開發來用於區域網路(LANs),但也可以被不高效的用於低速網路,例如廣域網路(WANs)。
使用具名管道(Named Pipes)首先需要在為SQL Server組態管理員(SQL Server Configuration Manager)使它生效(如果你要遠端連線的話),然後建立一個使用具名管道(Named Pipes)作為協議串連到伺服器的SQL Server別名。
具名管道(Named Pipes)使用TCP 445連接埠,在2個電腦間的任何防火牆裡請確保這個連接埠被開啟,包括Windows防火牆。
- VIA——虛擬介面適配器(Virtual Interface Adapter:VIA)是兩個系統間高效能通訊的協議,它需要在終端和專門串連口都要有特製硬體。
與具名管道(Named Pipes)一樣,使用VIA協議首先需要在為SQL Server組態管理員(SQL Server Configuration Manager)使它生效,然後建立一個使用虛擬介面適配器(Virtual Interface Adapter:VIA)作為協議串連到伺服器的SQL Server別名.雖然SQL Server 2012還支援VIA協議,從以後的版本開始它會被移除,因為新安裝時需要避免這個協議被安裝。
不管使用哪種協議,一旦串連被建立,SQL Server網路介面(SNI)在伺服器上與表格式資料流(TDS)終結點(下面會介紹)建立一個完全串連,用它來發送請求和接收資料。這裡追隨透過它生命週期的查詢的目的是,你發送SELECT語句且在等待接收結果集。
表格式資料流終結點(Tabular Data Stream(TDS) Endpoints)
TDS是微軟所有最先由Sybase設計用來與資料庫伺服器互動的協議。使用例如TCP/IP的網路通訊協定一旦串連被接通,與相關TDS終結點的聯絡會被建立,它在用戶端與伺服器端之間擔當著通訊點。
每個網路通訊協定都有一個TDS終結點,並且還有一個會被專用網路連接(dedicated administrator connection:DAC)使用。一旦連通性被建立,TDS訊息會被用做用戶端與伺服器端間的溝通。
SELECT語句是穿過TCP/IP協議(TCP/IP是預設協議)作為TDS訊息發送給SQL Server。
協議層(Protocal Layer)
當SQL Server中的協議層(Protocal Layer)收到你的TDS包,它會倒轉SQL Server網路介面(SNI)的工作,把包拆開找出裡麵包含的請求是什麼。協議層(Protocal Layer)同樣對把結果和狀態訊息打包並作為TDS訊息發回給用戶端負責。
我們的SELECT語句在TDS包裡標記為”SQL命令“類型的訊息,因為它傳給下一個組件,命令分析器(Command Parser),開始走向執行的道路。
顯示了我們的查詢現在到哪裡了。在用戶端,語句被SQL Server網路介面(SNI)打包在TDS包裡並發送給SQL Server中的協議層(Protocal Layer),在那裡被拆包,識別為SQL命令,這個代碼被SQL Server網路介面(SNI)發送給命令解析器(Command Parser)。
命令分析器(Command Parser)
命令分析器(Comamnd Parser)的角色是處理T-SQL語言事件(language events)。它首先檢查文法並通過協議層(protocol layer)返回給用戶端任何語法錯誤。如果文法是有效,然後下一步就是產生查詢計劃(query plan)或尋找已存在的計劃。查詢計劃(query plan)包含SQL Server將如何去執行這段代碼的細節。它通常被稱為執行計畫(execution plan)。
為了檢查查詢計劃(query plan),命令分析器(Comamnd Parser)會產生T-SQL的散列(hash)並核對計畫快取(plan cache)來決定是否有合適的計劃已經存在。計畫快取(plan cache)是在緩衝池(buffer pool)裡用來緩衝查詢計劃(query plan)的地區。如果找到匹配的,從緩衝裡這個計劃會被讀取並傳給查詢執行器(Query Executor)去執行。(下一篇將介紹如果沒有找到匹配會發生什麼。)
SQL Server 2012:SQL Server體繫結構——一個查詢的生命週期(第1部分)