自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

擦亮自己的眼睛去看SQL Server之整體介紹

數(shù)據(jù)庫(kù) SQL Server
研究SQL Server后你會(huì)發(fā)現(xiàn)原來(lái)我們身邊有設(shè)計(jì)這么好的產(chǎn)品值得我們研究。下面簡(jiǎn)單的從SQL Server產(chǎn)品結(jié)構(gòu)、SQL Server數(shù)據(jù)庫(kù)引擎結(jié)構(gòu)、SQL Server執(zhí)行模型三方面整體介紹一下SQL Server。

也許你不需要了解SQL Server的內(nèi)部機(jī)制,你照樣能完成CRUD,而且可能完成的還不錯(cuò),也許你不需要研究SQL Server的架構(gòu)設(shè)計(jì),你照樣可以根據(jù)自己參與的項(xiàng)目經(jīng)驗(yàn)設(shè)計(jì)出自己需要的架構(gòu),也許你會(huì)說(shuō)不斷的需求變化已經(jīng)把自己的精力耗盡,也許你會(huì)說(shuō)針對(duì)項(xiàng)目目前的情況不需要對(duì)SQL Server有較深的了解,也許你還會(huì)說(shuō)我喜歡研究某某公司某產(chǎn)品,也許你還會(huì)覺(jué)得SQL Server太過(guò)龐大無(wú)從下手……

但是總有些問(wèn)題遲早會(huì)促使我們(以SQL Server為主要存儲(chǔ)數(shù)據(jù)容器的開(kāi)發(fā)人員)開(kāi)始踏上研究SQL Server的。比如你的數(shù)據(jù)庫(kù)隨著數(shù)據(jù)量增長(zhǎng)性能越來(lái)越慢;再比如你的數(shù)據(jù)庫(kù)經(jīng)常莫名其妙掛掉;再比如你照著網(wǎng)絡(luò)或者書(shū)籍上的各種清單優(yōu)化和學(xué)習(xí)數(shù)據(jù)庫(kù)時(shí),發(fā)現(xiàn)他們很多地方不可靠;再比如你在做sql語(yǔ)句優(yōu)化時(shí)你會(huì)發(fā)現(xiàn)對(duì)很多SQL Server輸出信息不明白具體的意思…等等這些都再向你傳遞一個(gè)信息,你需要擦亮自己的眼睛去系統(tǒng)深入的學(xué)習(xí)SQL Server。而不是瞇著眼睛簡(jiǎn)單了解一下。

有位朋友寫(xiě)的一篇<<程序員是否需要底層知識(shí)>>,其中有句盡量去打開(kāi)身邊的盒子,覺(jué)得很有道理。研究SQL Server后你會(huì)發(fā)現(xiàn)原來(lái)我們身邊有設(shè)計(jì)這么好的產(chǎn)品值得我們研究。下面簡(jiǎn)單的從SQL Server產(chǎn)品結(jié)構(gòu)、SQL Server數(shù)據(jù)庫(kù)引擎結(jié)構(gòu)、SQL Server執(zhí)行模型三方面整體介紹一下SQL Server。

一、SQL Server2008產(chǎn)品結(jié)構(gòu)

介紹這部分的主要原因是,總能發(fā)現(xiàn)不少人對(duì)SQL Server產(chǎn)品沒(méi)有整體的了解。下面部分主要是照搬msdn,其中一部分加了自己的理解。在介紹之前有必要說(shuō)下OLAP與OLTP。OLTP,聯(lián)機(jī)事務(wù)處理。這是大部分基于數(shù)據(jù)庫(kù)的項(xiàng)目中用到的。主要記錄系統(tǒng)的具體交易事務(wù)。OLAP,聯(lián)機(jī)分析處理。 這個(gè)經(jīng)常是和BI密切相關(guān),簡(jiǎn)單理解這是BI的的核心技術(shù)之一。下面的Analysis Services、Integration Services都屬于OLAP范疇。

 

數(shù)據(jù)庫(kù)引擎是用于存儲(chǔ)、處理和保護(hù)數(shù)據(jù)的核心服務(wù)。數(shù)據(jù)庫(kù)引擎提供了受控訪(fǎng)問(wèn)和快速事務(wù)處理,以滿(mǎn)足企業(yè)內(nèi)最苛刻的數(shù)據(jù)消費(fèi)應(yīng)用程序的要求。數(shù)據(jù)庫(kù)引擎還提供了大量的支持以保持高可用性。這個(gè)組件可以說(shuō)是SQL Server最核心最底層的部分,其他組件都依賴(lài)于數(shù)據(jù)庫(kù)引擎。

多維數(shù)據(jù)允許您設(shè)計(jì)、創(chuàng)建和管理包含從其他數(shù)據(jù)源(如關(guān)系數(shù)據(jù)庫(kù))聚合的數(shù)據(jù)的多維結(jié)構(gòu),從而實(shí)現(xiàn)對(duì) OLAP 的支持。當(dāng)然你可以不需要使用這個(gè)組件也能實(shí)現(xiàn)多維數(shù)據(jù),但是它讓你更加方便有效。

數(shù)據(jù)挖掘使您可以設(shè)計(jì)、創(chuàng)建和可視化數(shù)據(jù)挖掘模型。通過(guò)使用多種行業(yè)標(biāo)準(zhǔn)數(shù)據(jù)挖掘算法,可以基于其他數(shù)據(jù)源構(gòu)造這些挖掘模型。通過(guò)這個(gè)組件,可以方便你從數(shù)據(jù)中得到對(duì)于企業(yè)決策有效的信息。

Integration Services 是一個(gè)生成高性能數(shù)據(jù)集成解決方案的平臺(tái),其中包括對(duì)數(shù)據(jù)倉(cāng)庫(kù)提供提取、轉(zhuǎn)換和加載 (ETL) 處理的包。

復(fù)制是一組技術(shù),用于在數(shù)據(jù)庫(kù)間復(fù)制和分發(fā)數(shù)據(jù)和數(shù)據(jù)庫(kù)對(duì)象,然后在數(shù)據(jù)庫(kù)間進(jìn)行同步操作以維持一致性。使用復(fù)制時(shí),可以通過(guò)局域網(wǎng)和廣域網(wǎng)、撥號(hào)連接、無(wú)線(xiàn)連接和 Internet,將數(shù)據(jù)分發(fā)到不同位置以及分發(fā)給遠(yuǎn)程用戶(hù)或移動(dòng)用戶(hù)。可以用在master-slave的設(shè)計(jì)中。

Reporting Services 提供企業(yè)級(jí)的 Web 報(bào)表功能,從而使您可以創(chuàng)建從多個(gè)數(shù)據(jù)源提取數(shù)據(jù)的表,發(fā)布各種格式的表,以及集中管理安全性和訂閱。

Service Broker 幫助開(kāi)發(fā)人員生成安全的可縮放數(shù)據(jù)庫(kù)應(yīng)用程序。這一新的數(shù)據(jù)庫(kù)引擎技術(shù)提供了一個(gè)基于消息的通信平臺(tái),從而使獨(dú)立的應(yīng)用程序組件可作為一個(gè)工作整體來(lái)執(zhí)行。Service Broker 包括可用于異步編程的基礎(chǔ)結(jié)構(gòu),該結(jié)構(gòu)可用于單個(gè)數(shù)據(jù)庫(kù)或單個(gè)實(shí)例中的應(yīng)用程序,也可用于分布式應(yīng)用程序。

#p#

二、SQL Server2008數(shù)據(jù)庫(kù)引擎結(jié)構(gòu)

 

很明顯數(shù)據(jù)庫(kù)引擎很復(fù)雜,很多細(xì)節(jié)需要我們花很多精力去研究。這篇文章按照標(biāo)題的意思,大致介紹下:

一、協(xié)議層(Protocol Layer)

當(dāng)一個(gè)應(yīng)用程序與SQL Server數(shù)據(jù)庫(kù)引擎通訊時(shí),協(xié)議層提供的應(yīng)用程序編程接口利用微軟自定義的tabular data stream(TDS)package來(lái)規(guī)范通訊格式。這一層的意義在于向應(yīng)用程序提供訪(fǎng)問(wèn)SQL Server的接口。

SQL Server Network Interface(簡(jiǎn)稱(chēng)SNI)

SNI是在服務(wù)器和客戶(hù)端之間建立網(wǎng)絡(luò)連接的一種協(xié)議,他提供一組在數(shù)據(jù)庫(kù)引擎和SQL Server客戶(hù)端使用的API函數(shù)。SNI代替了SQL Server2000下的Net- Libraries組件和MDAC組件。主要是因?yàn)镸DAC是隨著Windows一起發(fā)布的,SQL Server小組在研發(fā)SQL Server2005后期去協(xié)調(diào)Windows中的MDAC是一件頭疼的事情。所以他們決定SNI的解決方案,這意味這部分代碼隨著SQL Server一起發(fā)布。SQL Server支持共享內(nèi)存(Shared memory)、TCP/IP、命名管道(Named Pipes)、虛擬接口適配器(Virtual Interface Adapter,即VIA)四種協(xié)議。一旦建立連接,SNI就會(huì)向服務(wù)器的TDS斷點(diǎn)創(chuàng)建一條安全的連接,用來(lái)進(jìn)行數(shù)據(jù)的請(qǐng)求和返回。

表格格式數(shù)據(jù)流端點(diǎn)(Tabular Data Stream,簡(jiǎn)稱(chēng)TDS)

TDS是一種微軟具有自主知識(shí)產(chǎn)權(quán)的協(xié)議,原本是Sybase設(shè)計(jì)的。SQL Server在安裝時(shí)為其支持的四種協(xié)議各創(chuàng)建一個(gè)端點(diǎn),如果協(xié)議被激活,那么所有用戶(hù)均可以使用這個(gè)協(xié)議。此外還有一個(gè)專(zhuān)門(mén)為專(zhuān)用管理員連接(DAC)而設(shè)置的端點(diǎn)。一條SQL語(yǔ)句則會(huì)通過(guò)TCP/IP連接以TDS消息的形式發(fā)送給SQL Server。

協(xié)議層(Protocol Layer)

一旦協(xié)議層接收到TDS包,就會(huì)在反轉(zhuǎn)和解包工作,以找到所包含的請(qǐng)求。協(xié)議層也負(fù)責(zé)打包結(jié)果和狀態(tài)消息,并以TDS消息的形式返回客戶(hù)端。

二、關(guān)系引擎(Relational Engine)

關(guān)系引擎又成為查詢(xún)處理器,包括用來(lái)確定某個(gè)查詢(xún)所要做的操作及進(jìn)行這些操作最佳方式的SQL Server組件。同時(shí)關(guān)系引擎也負(fù)責(zé)向存儲(chǔ)引擎請(qǐng)求數(shù)據(jù)時(shí)查詢(xún)的執(zhí)行,并處理返回的結(jié)果。

命令分析器(Cmd Parser)

命令分析器處理發(fā)送給SQL Server的T-SQL語(yǔ)言事件。它會(huì)先檢查T(mén)-SQL語(yǔ)法,并返回任何錯(cuò)誤信息客戶(hù)端,如果語(yǔ)法有效,就會(huì)進(jìn)一步產(chǎn)生執(zhí)行計(jì)劃或者去查找一個(gè)已經(jīng)存在的執(zhí)行計(jì)劃。命令解析器通過(guò)T-SQL哈希值向位于緩沖池中的Plan Cache發(fā)出匹配要求,以檢查是否存在該執(zhí)行計(jì)劃;如果不存在則把T-SQL翻譯成可以執(zhí)行的內(nèi)部格式,即查詢(xún)樹(shù)。

查詢(xún)優(yōu)化器(Optimizer)

查詢(xún)優(yōu)化器從命令解析器中獲取查詢(xún)樹(shù),并為它的實(shí)際執(zhí)行做準(zhǔn)備。生成執(zhí)行計(jì)劃的第一步是對(duì)每個(gè)查詢(xún)進(jìn)行規(guī)范化,規(guī)范化的過(guò)程有可能將單個(gè)查詢(xún)分解成多個(gè)粒度合適的查詢(xún)。然后進(jìn)行最優(yōu)化,SQL Server的查詢(xún)優(yōu)化器是基于成本的,它會(huì)選擇它認(rèn)為成本在合理時(shí)間范圍內(nèi)最低的執(zhí)行計(jì)劃,它使用一些內(nèi)部指標(biāo)(內(nèi)存需求、CPU利用率和I/O需求數(shù)目)作為選擇的依據(jù)。此外查詢(xún)優(yōu)化器還會(huì)考慮請(qǐng)求語(yǔ)句的類(lèi)型、檢查受到影響的各表的數(shù)據(jù)量、表中的索引,以及SQL Server統(tǒng)計(jì)數(shù)據(jù)。這部分可以說(shuō)是SQLServer最智能最負(fù)責(zé)的部分。

SQL管理器

SQL管理器負(fù)責(zé)管理與存儲(chǔ)過(guò)程及其計(jì)劃有關(guān)的事務(wù),并負(fù)責(zé)管理查詢(xún)的自動(dòng)化參數(shù)。

數(shù)據(jù)庫(kù)管理器

數(shù)據(jù)庫(kù)管理器管理查詢(xún)編譯和查詢(xún)優(yōu)化所需的對(duì)元數(shù)據(jù)的訪(fǎng)問(wèn)。比如,對(duì)SQL語(yǔ)法庫(kù)的訪(fǎng)問(wèn)。

查詢(xún)執(zhí)行器(Query Executor)

查詢(xún)執(zhí)行器運(yùn)行查詢(xún)優(yōu)化器生成的執(zhí)行計(jì)劃,根據(jù)執(zhí)行計(jì)劃中的步驟與存儲(chǔ)引擎進(jìn)行交互,檢索或修改數(shù)據(jù)。

三、存儲(chǔ)引擎(Storage Engine)

存儲(chǔ)引擎包括存取方法、事務(wù)管理和緩沖區(qū)管理器。

存取方法(Access Methods)

SQL Server需要定位數(shù)據(jù)庫(kù)時(shí),會(huì)調(diào)用存取方法代碼。它提供了一組代碼,用來(lái)創(chuàng)建和請(qǐng)求對(duì)數(shù)據(jù)頁(yè)面和索引頁(yè)面進(jìn)行掃描,并且將準(zhǔn)備好的OLE DB數(shù)據(jù)行集返回給關(guān)系引擎。存取方法并不真正進(jìn)行操作,它只負(fù)責(zé)向緩沖區(qū)管理器發(fā)出請(qǐng)求。存取方法不僅僅如此,它還會(huì)預(yù)測(cè)哪些數(shù)據(jù)頁(yè)面索引頁(yè)面即將處理,這樣才能保證SQLServer高速處理。

事務(wù)管理器(Transaction Manager)

事務(wù)管理器包括兩個(gè)組件:日志管理器和鎖管理器。

鎖管理器負(fù)責(zé)數(shù)據(jù)的并發(fā)保護(hù)和基于特定隔離級(jí)別的管理。

日志管理器負(fù)責(zé)將事務(wù)日志提前記錄于日志文件中,從而起到保護(hù)數(shù)據(jù)的作用。訪(fǎng)問(wèn)方法代碼請(qǐng)求的所有數(shù)據(jù)更改都必須記入日志中,這種方式稱(chēng)為預(yù)寫(xiě)日志。這是數(shù)據(jù)修改(插入、更新、刪除、分配釋放區(qū)和頁(yè)、創(chuàng)建刪除索引等)唯一總是寫(xiě)磁盤(pán)的的操作。它記錄的是修改操作發(fā)生以后數(shù)據(jù)頁(yè)面發(fā)生的改變,因此我們很難從中發(fā)現(xiàn)有意義的信息。除非用些第三方的工具。

緩沖區(qū)管理器(Buffer Manager)

緩沖區(qū)管理器用來(lái)管理緩沖區(qū)內(nèi)存池中數(shù)據(jù)頁(yè)面的分布。所有對(duì)數(shù)據(jù)的操作,都是先在緩沖區(qū)中操作的。然后由SQLOS中的檢查點(diǎn)或者是惰性寫(xiě)入器同步到磁盤(pán)中。這樣能保證SQLServer更快的響應(yīng)請(qǐng)求。操作完成后就結(jié)果返回給訪(fǎng)問(wèn)方法。

四、緩沖池

緩沖池是SQLServer最消耗內(nèi)存的部分。主要包含執(zhí)行計(jì)劃緩存和數(shù)據(jù)緩存。

五、SQLOS

可以理解為是SQLServer的資源管理器,主要負(fù)責(zé)與操作系統(tǒng)中的一些交互操作。如:內(nèi)存分配、資源調(diào)度、I/O操作、進(jìn)程線(xiàn)程管理以及同步、閂鎖等等。這部分在此不展開(kāi),后期考慮專(zhuān)門(mén)寫(xiě)一章。

#p#

三、SQLServer執(zhí)行模型

從圖中可以看出,我這的執(zhí)行模型也說(shuō)的是整個(gè)SQLServer服務(wù)端在接收請(qǐng)求時(shí),要發(fā)生的事情。但是和前面一樣,SQLServer很多時(shí)候很多細(xì)化過(guò)于復(fù)雜沒(méi)有辦法能用一章圖描述清楚。這個(gè)圖簡(jiǎn)單的說(shuō)明了SQLServer的執(zhí)行模型。在分析這個(gè)圖前,要明確一個(gè)問(wèn)題。SQLServer是基于C/S的結(jié)構(gòu)的產(chǎn)品。這樣很明顯就分為客戶(hù)端與服務(wù)端。平時(shí)管理數(shù)據(jù)庫(kù)的MSSMS以及我們需要訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)的系統(tǒng)就是屬于SQLServer的客戶(hù)端,SQLServer服務(wù)端主要是由一些服務(wù)方式構(gòu)成。

因?yàn)槭荂/S,那么客戶(hù)端的所有請(qǐng)求都必須傳輸?shù)椒?wù)端,才能被執(zhí)行。這樣的話(huà)就涉及的雙方通信的協(xié)議,這個(gè)協(xié)議在SQLServer2005后,就稱(chēng)為SNI。包的格式就是TDS??蛻?hù)端的TDS通過(guò)SQLServer支持的協(xié)議傳輸?shù)絊QLServer服務(wù)端,服務(wù)端有一個(gè)組件叫連接監(jiān)聽(tīng)服務(wù),它一直在監(jiān)聽(tīng)這請(qǐng)求端口。它負(fù)責(zé)監(jiān)聽(tīng)新的連接,清除失敗連接,將結(jié)果集、消息和狀態(tài)返回給客戶(hù)端。連接監(jiān)聽(tīng)服務(wù)會(huì)把包發(fā)送給協(xié)議層,協(xié)議層對(duì)這個(gè)包進(jìn)行解包,提取里面要執(zhí)行的SQL語(yǔ)句,交給關(guān)系引擎,關(guān)系引擎經(jīng)過(guò)處理后生成執(zhí)行計(jì)劃,并且執(zhí)行計(jì)劃。一旦關(guān)系引擎開(kāi)發(fā)執(zhí)行工作計(jì)劃時(shí),就會(huì)創(chuàng)建任務(wù)對(duì)象。任務(wù)對(duì)象必須關(guān)聯(lián)一個(gè)空閑工作線(xiàn)程。工作線(xiàn)程關(guān)聯(lián)到新任務(wù)后,狀態(tài)設(shè)置為初始化。當(dāng)完成初始化后,工作線(xiàn)程就轉(zhuǎn)成為可運(yùn)行。這時(shí)工作線(xiàn)程就準(zhǔn)備就緒,只要有空閑的調(diào)度器就可以執(zhí)行了。如果執(zhí)行過(guò)程中遇到定時(shí)器等待、請(qǐng)求資源等待、I/O等待就會(huì)掛起移至相應(yīng)的列表中。SQLServer采用了非搶占式調(diào)度。一個(gè)線(xiàn)程會(huì)完成這個(gè)任務(wù)的操作。不存在上下文切換,當(dāng)然如果不是SQLServer的代碼則采用搶占式調(diào)度,比如擴(kuò)展存儲(chǔ)過(guò)程。

今天分析就到此結(jié)束,文中如有描述不當(dāng)?shù)牡胤剑瑲g迎指出。共同進(jìn)步才是硬道理。

原文鏈接:http://www.cnblogs.com/yueyue_jwfm/archive/2011/06/22/2087044.html

【編輯推薦】

  1. 分析TOP語(yǔ)句放到表值函數(shù)外,效率異常低下的原因
  2. 雙TOP二分法生成分頁(yè)SQL類(lèi)
  3. SQL Server數(shù)據(jù)庫(kù)中簡(jiǎn)單的SELECT TOP
  4. 利用top構(gòu)造Sql Server分頁(yè)查詢(xún)
  5. 說(shuō)說(shuō)Top子句對(duì)查詢(xún)計(jì)劃的影響
責(zé)任編輯:艾婧 來(lái)源: 小軍人的博客
相關(guān)推薦

2011-07-01 13:39:28

SQL ServerInsert

2011-08-29 10:35:26

SQL Server

2011-07-01 10:18:58

SQL ServerSelect

2011-07-14 09:37:53

SQL Server

2011-08-15 09:30:59

SQL Server

2010-01-13 15:20:27

三層交換機(jī)

2011-04-22 09:33:49

投影機(jī)鏡頭投影機(jī)

2011-05-24 09:39:15

投影機(jī)鏡頭保養(yǎng)

2011-05-05 10:10:09

投影機(jī)

2015-11-27 14:12:43

2011-03-28 10:17:39

sql server

2012-04-02 19:32:11

iPhone 4

2010-09-16 13:42:55

SQL SERVER索

2010-11-08 10:57:05

SQL Server的

2010-07-21 14:04:12

SQL Server引

2010-09-27 10:59:23

SQL SERVER事

2011-04-20 17:08:01

2010-07-05 10:37:00

2009-08-06 16:44:06

2010-07-23 18:33:57

SQL Server游
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)