SQL Server 2008 基礎

SQL Server 2008 基礎

SQL流程

     wKioL1fk86eD5RL_AAFeqBqTpX4092.jpg-wh_50

TDS是一種協議,一系列描述兩個計算機間如何傳輸數據的規則。象別的協議一樣,它定義了傳輸信息的類型和他們傳輸的順序。總之,協議描述了線上的位,即數據如何流動。表格數據流協議是建立在TCP/IP Net-Library之上的,包含在TCP數據段內。TDS1433端口進行數據庫通信。

TDS協議位於TCP的數據段內,結構如下:

IP

TCP

TDS

TDSDATA

    8位頭

TDS客戶端使用稱爲表格格式數據流 (TDS) SQL Server 專用應用程序級協議來發送 SQL 語句。數據包由用於 SQL Server Microsoft OLE DB 提供程序、SQL Server ODBC 驅動程序或 DB-Library DLL 生成。TDS 數據包然後被傳遞給 SQL Server 客戶端 Net-Library,客戶端 Net-Library TDS 數據包封裝爲網絡協議數據包。在服務器上,服務器 Net-Library 接收網絡協議數據包,且析取 TDS 數據包並將其傳遞給關係數據庫服務器。在將結果返回給客戶端時,這一進程反向執行。

 

表格數據流端點:一個網絡協議一旦連接成功,就會創建一個對應的TDS端點,用於在客戶端與服務器之間互傳信息

         對於這一步,性能問題可能會出現在把請求的內容轉換成SQL Server能處理的格式的過程中,如果數據量大,轉換開銷就高,不管是從外部傳入SQL Server還是從SQL Server輸出到外部,都是如此

命令解釋器:TDS把請求轉換成SQL Server內部可識別的格式後,首先會傳到命令解釋器處,這個組件會檢查傳入的T-SQL語法是否符合規定。如果語法符合要求,就好生成查詢樹傳入查詢優化器中

         命令解釋器同時也會檢查是否已經存在緩存了的執行計劃,如果存在,就重用;如果不存在,就讓查詢優化器生成執行計劃

查詢優化器:該組件是SQL Server的核心部分,優化器的作用是對特定的請求進行一系列的優化,使其儘可能高效地對數據進行操作,最終選擇最低開銷的候選計劃生成預估執行計劃,並傳入執行器執行查詢.

查詢執行器:查詢執行器是執行查詢的組件,但是實際上並不是真正執行,而是通過OLEDB協議訪問並使用一系列的指令操作存儲引擎進行查詢的執行操作。存儲引擎纔是實際的查詢執行者

數據訪問方法:數據訪問方法是提供數據和索引的存儲、查詢及修改的代碼集合。它包含了索引操作數據的代碼,但是並不由自己去數據操作數據,而是提交請求到緩衝管理器

緩衝區管理器:緩衝管理器是管理BufferPool的組件。Buffer PoolSQL Server內存的主要部分,它管理內存中的數據,並把適當的數據作爲輸出傳輸給(數據訪問方法)。如果所需數據不在於內存中,緩衝管理器需要從磁盤讀取對應的數據頁到內存的數據緩存,然後把所需的數據返回給數據訪問方法。在這個過程中可能會出現一種等待狀態PageIOLatch

數據緩存:數據緩存是BufferPool中的最大部分,也可以說是SQL Server中佔用內存最多的部分。它用於存放從磁盤加載到內存中的數據,以便後續操作使用

         對於當前數據緩存中每個數據庫的緩存大小情況。可以使用一個DMV來查詢

         ——sys.dm_os_buffer_descriptors

 

SELECT COUNT(*) * 8 / 1024 AS 'Cached Size(MB)' ,

CASE database_id

WHEN 32767 THEN 'ResourceDb'

ELSE DB_NAME(database_id)

END AS 'Database'

FROM sys.dm_os_buffer_descriptors

GROUP BY DB_NAME(database_id) , database_id

ORDER BY 'Cached Size (MB)' DESC

 

事務管理器

事務管理器主要包含兩部分:鎖管理器和日誌管理器

1、  鎖管理器通過使用鎖機制來保證數據的併發性和隔離性。

2、日誌管理器通過預寫入日誌機制,保證事務的ACID特性當需要修改數據時,數據訪問方法會先到事務管理器中通過對事務日誌進行操作,把請求傳到Buffer管理器中完成,然後返回給數據訪問方法並通過事務管理器寫入日誌文件中

 

數據庫事務

事務是對數據庫操作的工作單元,這個單元可以是一個select語句,也可以是包含多個selectupdatedaleteinsert等操作的命令集合。這個集合被認爲是工作單元,SQL SERVER的很多特性都是基於這個工作單元,也就是事務

關係數據庫包含4大核心事務特性:原子性、一致性、隔離性和持久性,簡稱ACID特性

 

1、原子性

         原子性意味着一個事務內的所有操作必須全部完成或者全部回滾。典型的例子是在ATM機上操作時,要麼取錢、存錢或者轉賬成功,要麼等於從來都沒有做過任何操作。如果轉賬成功但是對方未收到款項,勢必造成很大問題

2、一致性

         一致性要求整個事務在運行的前後數據庫的狀態是一致的,比如庫存不能爲負值、性別字段的值要麼爲要麼爲等。爲了確保事務的一致性,事務不能打破數據定義中的一致性約束

3、隔離性

         隔離性保證在同一時間中,一個事務的運行不能被另外一個事務所影響。但是SQL Server實際是允許這個操作的

4、持久性

         持久性意味着事務一旦成功提交,將永久存儲到服務器的文件系統中,即使系統在中途崩潰,所發生的效果都不會丟失,這個會通過日誌來保證

 

         提交事務意味着永久把事務的影響記錄到數據庫中,回滾意味着把發生的所有操作去除,等於沒有做過,不過日誌其實還是會記錄這個操作

wKiom1fk89HQ2pKDAAEBZ9_jAbI627.jpg-wh_50

關係引擎和存儲引擎是SQLServer的兩大組件

         1、關係引擎,也叫查詢處理器,因爲它的主要作用是優化和執行查詢。關係引擎中包含的命令解析器用於檢查語法和轉換查詢樹,而查詢優化器則用於優化查詢,還有一個查詢執行器負責執行查詢

    2、存儲引擎,負責管理所要數據及涉及的I/O,其中包含的數據訪問方法用於處理對行、索引、也、行版本、空間分配等的I/O請求,緩衝區管理器用於管理SQL Server的主要內存消耗組件——Buffer Pool,事務管理器將通過所管理數據及維護事務的ACID屬性

緩衝池:在數據庫性能及管理領域中屬於相當重要的一個組件,也是SQL Server中內存消耗最大的組件。緩衝池包含了SQL Server的所有緩存,如計劃緩存和數據緩存等

 

下面是邏輯CPU 格式在不同位數的操作系統中

能支持的最大工作者線程數。

1)對於32 位操作系統:

總可用邏輯CPU<=4 時,最大工作者線程=256

總可用邏輯CPU>4 時,最大工作者線程=256+((邏輯CPU-4)×8)。

2)對於64 位操作系統:

總可用邏輯CPU<=4 時,最大工作者線程=512

總可用邏輯CPU>4 時,最大工作者線程=512+((邏輯CPU-4)×16)。

還有一個比較簡單的方法可用於檢查當前系統的最大線程數。比如執行下面的腳本:

SELECT max_workers_count

FROMsys.dm_os_sys_info

 

通常出現threadpool 類型的等待意味着當前有大量並行執行計劃,或者遇到了CPU

頸,但是不管是什麼情況,都需要經常檢查這部分的數據,以確保有足夠的線程可用對

於每個工作線程,在64 位系統中都要消耗2MB 的內存,在32 位系統需要消耗0.5MB

內存,所以SQL Server 只會在需要的時候才創建工作線程。這部分的信息可以通過sys.

dm_os_workers 這個DMV 來查看。

SELECT COUNT(*)

FROMsys.dm_os_workers

 

SQL Server NUMA CPU 配置

 

SELECT scheduler_id ,

cpu_id ,

parent_node_id ,

status

FROM sys.dm_os_schedulers

 

當前已緩存的計劃數及所佔的MB

 

SELECT COUNT(*) AS 'Number of Plans' ,

SUM(CAST(size_in_bytes AS BIGINT)) / 1024 /1024 AS 'Plan Cache Size (MB)'

FROM sys.dm_exec_cached_plans

 

查看緩存對象的對應內存數

 

SELECT objtype AS 'Cached Object Type' ,

COUNT(*) AS 'Number of Plans' ,

SUM(CAST(size_in_bytes AS BIGINT)) / 1024 /1024 AS 'Plan Cache Size (MB)' ,

AVG(usecounts) AS 'Avg Use Count'

FROM sys.dm_exec_cached_plans

GROUP BY objtype

 

 

查詢數據庫路徑

 

USE master  

go  

SELECT physical_name  

FROM   sys.master_files  

WHERE  database_id = DB_ID('RJBDB')

 

檢查證書

select name, start_date, expiry_date

from sys.certificates

where name not like '##%'

 

查看鏡像端點

SELECT * FROM sys.endpoints e

 

查詢鏡像狀態

 

select *

from sys.database_mirroring

where database_id=DB_ID('RJBDB')


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章