標籤:關聯式資料庫 microsoft 應用程式 伺服器 電腦
SQL Server 2008 基礎
SQL流程
650) this.width=650;" src="http://s5.51cto.com/wyfs02/M00/87/F4/wKioL1fk86eD5RL_AAFeqBqTpX4092.jpg-wh_500x0-wm_3-wmp_4-s_2816278903.jpg" title="1.jpg" alt="wKioL1fk86eD5RL_AAFeqBqTpX4092.jpg-wh_50" />
TDS是一種協議,一系列描述兩個電腦間如何傳輸資料的規則。象別的協議一樣,它定義了傳輸資訊的類型和他們傳輸的順序。總之,協議描述了“線上的位”,即資料如何流動。表格式資料流協議是建立在TCP/IP Net-Library之上的,包含在TCP資料區段內。TDS用1433連接埠進行資料庫通訊。
TDS協議位於TCP的資料區段內,結構如下:
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 Pool是SQL 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語句,也可以是包含多個select、update、dalete、insert等操作的命令集合。這個集合被認為是工作單元,SQL SERVER的很多特性都是基於這個工作單元,也就是事務
關聯式資料庫包含4大核心事務特性:原子性、一致性、隔離性和持久性,簡稱ACID特性
1、原子性
原子性意味著一個事務內的所有操作必須全部完成或者全部復原。典型的例子是在ATM機上操作時,要麼取錢、存錢或者轉賬成功,要麼等於從來都沒有做過任何操作。如果轉賬成功但是對方未收到款項,勢必造成很大問題
2、一致性
一致性要求整個事務在啟動並執行前後資料庫的狀態是一致的,比如庫存不能為負值、性別欄位的值要麼為“男”要麼為“女”等。為了確保事務的一致性,事務不能打破資料定義中的一致性約束
3、隔離性
隔離性保證在同一時間中,一個事務的運行不能被另外一個事務所影響。但是SQL Server實際是允許這個操作的
4、持久性
持久性意味著事務一旦成功提交,將永久儲存到伺服器的檔案系統中,即使系統在中途崩潰,所發生的效果都不會丟失,這個會通過日誌來保證
提交事務意味著永久把事務的影響記錄到資料庫中,復原意味著把發生的所有操作去除,等於沒有做過,不過日誌其實還是會記錄這個操作
650) this.width=650;" src="http://s2.51cto.com/wyfs02/M01/87/F8/wKiom1fk89HQ2pKDAAEBZ9_jAbI627.jpg-wh_500x0-wm_3-wmp_4-s_2601675609.jpg" title="2.jpg" alt="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‘)
本文出自 “電腦網路技術” 部落格,轉載請與作者聯絡!
SQL Server 2008 基礎