日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

浅谈 SQL Server 内部运行机制

發布時間:2023/12/10 数据库 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 浅谈 SQL Server 内部运行机制 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ? ? ? 對于已經很熟悉T-SQL的讀者,或者對于較專業的DBA來說,邏輯的增刪改查,或者較復雜的SQL語句,都是非常簡單的,不存在任何挑戰,不值得一提,那么,SQL的哪些方面是他們的挑戰 或者軟肋呢?

那就是sql優化。然而,要向成為一個好的Sql優化高手,首先要做的一件事無疑就是了解sql語句在SQL Server中是如何執行的。在這一系列中,我們將開始sqlserver優化系列講解,本 講為優化系列的開篇文章,

在本篇文章中,我們將重點講解SQL Server體系結構

? ? ? ?在正式講解之前,我們先來看看如下問題,你是否遇到過,若你遇到過且成功解決,那么這篇文章,你可以跳過。

? ? ? ?為了測試需要,我們先模擬插入5億3千多萬條數據。

1SELECT?COUNT(1)?FROM?BigDataTest

? ? ?

? ? ? (一)查詢緩慢問題

? ? ? ? ?*,臨時表,表連接,子查詢等造成的查詢緩慢問題,你能解決嗎?

? ? ? (二)內存泄漏

? ? ? ? 如下查詢了8分2秒,然后內存溢出,你知道問題嗎?

1SELECT?*?FROM?BigDataTest

? ? ?

? ? ?(三)經常聽說如下概念,你都能解決嗎?

? ? ? ? 事務與鎖(請參考我另一篇文章:淺談SQL Server事務與鎖(上篇)),ACID,隔離級別,臟讀,分表分庫,水平拆分,垂直拆分,高并發等

一? SQL Server體系結構抽象

?

?二? SQL Server體系結構概述

? ? ? ?SQL Server核心體系結構,大致包括六大部分:客戶端訪問工具、SQL Server 網絡接口(SQL Server Network Interface,SNI)、關系引擎、存儲引擎、

磁盤和緩沖池。下圖為SQL Server核心體系大致輪廓圖。

?(一)SQL Server客戶端訪問工具

? ? ? SQL Server客戶端訪問工具,提供了遠程訪問技術,它與SQL Server服務端基于一定的協議,使其能夠遠程訪問數據庫,就像在本地操作數據庫一樣,如我們經常用的

Microsoft SQL Server Management Studio。

? ? ? ?SQL Server客戶端訪問工具是比較多的,其中比較流行的要數Microsoft SQL Server Management Studio 和Navicat(Navicat在MySQL中也是比較常用的)了,至于其他工具,

本篇文章就不列舉了,感興趣的讀者朋友,可以查詢一下。

(二)SQL Server網絡協議

? ? ? ?SQL Server網絡協議,又叫SQL Server網絡接口(SNI),它是構成客戶端和服務端通信的橋梁,它與SQL Server服務端基于一定協議,方可通信,

如我們在客戶端輸入一條查詢語句SELECT * FROM BigDataTest,這條語句,只有客戶端和服務端基于一定協議,方可被服務端解析,否則,被視為無

效語句。

? ? ? ?SQL Server網絡協議,由一組API構成,這些API供SQL Server數據庫引擎和SQL Server本地客戶端調用,如實現最基本的CRUD通信。

? ? ? ?SQL Server 網絡接口(SQL Server Network Interface,SNI)只需要在客戶端和服務端配置網絡協議即可,它支持一下協議:

? ? ?(1)共享內存

? ? ?(2)TCP/IP

? ? ?(3)命名管道

? ? ?(4)VIA

(三)關系引擎

? ? ? 關系引擎,也叫查詢引擎,其主要功能是負責處理SQL語句,其核心組件由三部分組成:命令分析器、查詢優化器和查詢執行器。

? ? (1)命令分析器:負責解析客戶端傳遞過來的T-SQL語句,如客戶端傳遞一條SQL語句:SELECT * FROM BigDataTest,它會檢查該語句的語法結構,若語法

錯誤,它會將錯誤返回給協議層,然后協議層將錯誤返回給客戶端;如果語法結構正確,它會根據查詢命令生成查詢計劃或尋找一個已存在的查詢計劃(先在緩沖池計劃緩

存中查找,若找到,則直接給查詢執行器執行,若未找到,則會生成基于T-SQL的查詢樹,然后交給查詢優化器優化)

? ? ?(2)查詢優化器:負責優化命令解析器生成的T-SQL查詢樹(基于資源的優化,而非基于時間的優化),然后將最終優化結果傳遞給查詢執行器執行。查詢優化器是基于

“資源開銷”的優化器,這種算法評估多種可執行的查詢方式,并從中選擇開銷最低的方案作為優化結果,然后將該結果生成查詢計劃輸出給查詢執行器。注意,查詢優化器是

“基于資源開銷最優”而非“基于方案最優”,也就是,查詢優化器的最終優化結果未必是最好的方案,但一定是資源開銷最低的方案。

? ? ?(3)查詢執行器:負責執行查詢。假若查詢執行器接收到命令解析器或查詢優化器傳遞過來的SQL語句:SELECT * FROM BigDataTest,它通過OLE DB接口傳遞到存儲

引擎,再傳遞到存儲引擎的訪問方法。

(四)存儲引擎

? ? ? ? 存儲引擎,本質就是管理資源存儲的,它的核心組件包括三部分:訪問方法、事務管理器和緩沖區管理器。? ? ?

? ? ? (1)訪問方法:訪問方法本質是一個接口,供查詢執行器調用(該接口提供了所有檢索數據的代碼,接口的實際執行是由緩沖區管理器來執行的),假若查詢執行器傳遞一條SQL語句:

SELECT * FROM BigDataTest,訪問方法接收到該請求命令后,就會調用緩沖區管理器,緩沖區管理器就會調用緩沖池的計劃緩存,在計劃緩存中尋找到相應的結果集,然后返回給關系

引擎。

? ? ? ?(2)緩沖區管理器:供訪問方法調用,管理緩沖池,在緩沖池中查詢相應資源并返回結果集,供訪問方法返回給關系引擎。? ?

? ? ? ?(3)事務管理器:主要負責事務的管理(ACID管理)和高并發管理(鎖),它包括兩個核心組件(日志管理器和鎖管理器),鎖管理器負責提供并發數據訪問,設置隔離級別等;日志管理器負責

記錄所有訪問方法操作動作,如基本的CRUD。

(五)緩沖池

?

? ? ? ?緩沖池駐于內存中,是磁盤和緩沖區管理器的橋梁SQL Server中,所有資源的查詢都是在內存中進行的,即在緩沖池中進行的,假若緩沖池

接收到緩沖區管理器傳遞過來的的一條SQL語句:SELECT * FROM BigDataTest,緩沖區管理器數據緩存先從磁盤數據庫中取滿足條件的結果集,

然后放在緩沖池數據緩沖中,然后以結果集的形式返回給緩沖區管理器,供訪問方法返回給關系引擎的查詢執行器,然后返回給協議層,協議層再

返回給客戶端。注意,這里操作的是緩沖池中數據,而不是磁盤DB中的數據,并且操作的緩沖池數據不會立即寫入磁盤,因此就會造成查詢到結果

與BD中的結果不一致,這就是所謂的臟讀。

? ? ? ? 緩沖池主要包括兩部分:計劃緩存(生成執行計劃是非常耗時耗資源的,計劃緩存主要用來存儲執行計劃,以備后續使用)和數據緩存(通常是緩存池

中容量最大的,消耗內存最大,從磁盤中讀取的數據頁只要放在這里,方可調用)

(六)磁盤

??

? ? ? ? ? ?磁盤主要是用來存儲持久化資源的,如日志資源,數據庫資源和緩存池持久化支援等。

三? 一個查詢的完整流程

? ? ? ?如下為一個比較完善的查詢過程,即第二部分查詢語句:SELECT * FROM BigDataTest 整個過程。

總結

以上是生活随笔為你收集整理的浅谈 SQL Server 内部运行机制的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。