SQL Server 2008新特性之?dāng)?shù)據(jù)倉(cāng)庫(kù)可擴(kuò)展性
1. 導(dǎo)言
Microsoft SQL Server 2008提供了一個(gè)全面的數(shù)據(jù)倉(cāng)庫(kù)平臺(tái)。它使得你可以使用一套單獨(dú)的、整合的產(chǎn)品套件建立和管理你的數(shù)據(jù)倉(cāng)庫(kù),并使你可以為你的用戶提供洞察信息。它可以滿足最大規(guī)模企業(yè)的需求,給予你的終端用戶和IT員工所需的權(quán)利。
在SQL Server 2008版本中部署方面首先要關(guān)注的是要改進(jìn)整個(gè)產(chǎn)品套件的可擴(kuò)展性以充分滿足大型企業(yè)的需求。這里,我們將介紹我們已經(jīng)添加的用于改進(jìn)你的數(shù)據(jù)倉(cāng)庫(kù)體驗(yàn)的特性和改進(jìn)之處。建立、管理、傳送。SQL Server 2008使你很輕松地做到所有這些。
2. 新的數(shù)據(jù)倉(cāng)庫(kù)特性圖解
下面的表格顯示了SQL Server 2008中新的可擴(kuò)展特性,以及它們?cè)跀?shù)據(jù)倉(cāng)庫(kù)(DW)的哪方面可以提供幫助。
|
建立 |
管理 |
提供洞察信息 |
SQL Server 關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng) |
MERGE語(yǔ)句 變化數(shù)據(jù)捕捉(CDC) 最低限度日志記錄INSERT |
備份壓縮 |
星型關(guān)聯(lián)性能 在分區(qū)表上更快的并行查詢 GROUPING SETS |
資源監(jiān)控器 | |||
數(shù)據(jù)壓縮 對(duì)齊分區(qū)索引視圖 | |||
集成服務(wù) |
Lookup性能 管道性能 |
|
|
分析服務(wù) |
|
備份 |
MDX查詢性能:塊計(jì)算 查詢和回寫性能 |
可擴(kuò)展的共享數(shù)據(jù)庫(kù) | |||
報(bào)表服務(wù) |
|
報(bào)表可擴(kuò)展性 服務(wù)器可擴(kuò)展性 |
這篇文章簡(jiǎn)要地描述了在SQL Server 2008每一個(gè)不同組件中的數(shù)據(jù)倉(cāng)庫(kù)改進(jìn)之處,以及它們?cè)鯓訋椭銖哪愕臄?shù)據(jù)倉(cāng)庫(kù)獲得最大的受益。
#p#
3. SQL Server關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)數(shù)據(jù)倉(cāng)庫(kù)改進(jìn)之處
SQL Server 2008關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)與之前的版本相比改進(jìn)了很多,所以它在你創(chuàng)建、管理和查詢大型數(shù)據(jù)倉(cāng)庫(kù)時(shí)執(zhí)行得更為出色。這一章節(jié)將詳細(xì)講述表1中列出的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)數(shù)據(jù)倉(cāng)庫(kù)改進(jìn)之處。
3.1 星型關(guān)聯(lián)
有了維度模式的數(shù)據(jù)倉(cāng)庫(kù),你工作的很大一部分就包含了眾所周知的星型關(guān)聯(lián)查詢。這些查詢遵循一個(gè)公共模式,它將真實(shí)表和一個(gè)或多個(gè)維表關(guān)聯(lián)起來(lái)。此外,星型關(guān)聯(lián)查詢通常表達(dá)對(duì)維表的非主鍵字段過(guò)濾條件,并對(duì)真實(shí)表的一個(gè)字段(叫做measure字段)進(jìn)行聚合(一般是SUM)。有了SQL Server 2008,你將會(huì)體驗(yàn)到許多處理真實(shí)表大部分記錄的星型關(guān)聯(lián)查詢其性能獲得了極大的提高。新的技術(shù)是基于位圖過(guò)濾器的,也就是眾所周知的Bloom 過(guò)濾器。它使得SQL Server 可以在早期查詢?cè)u(píng)估中就除去不具資格的真實(shí)表記錄從而避免進(jìn)行進(jìn)一步的處理。這與SQL Server的競(jìng)爭(zhēng)產(chǎn)品所使用的處理技術(shù)相比節(jié)省了大量的CPU時(shí)間。你獲得的結(jié)果可能很多,我們的統(tǒng)計(jì)結(jié)果是一般情況下,當(dāng)使用新的星型關(guān)聯(lián)查詢處理能力時(shí)整個(gè)關(guān)系型數(shù)據(jù)倉(cāng)庫(kù)查詢工作負(fù)載的性能提高了15-20%。一些個(gè)別的查詢速度提高了7倍或更多。
新的星型關(guān)聯(lián)最優(yōu)化使用了一系列哈希關(guān)聯(lián),為每一個(gè)參與的維表建立一個(gè)哈希表。隨著這個(gè)哈希表的建立,還生成了叫做位圖過(guò)濾器(bitmap filter)的額外信息。位圖過(guò)濾器如圖1中顯示標(biāo)簽為“Join Reduction Info”的框圖。這些過(guò)濾器被放在事實(shí)表的掃描中,有效地將之后會(huì)被關(guān)聯(lián)刪除的大多數(shù)記錄移除。這使得之后不必再花費(fèi)時(shí)間拷貝被刪除的記錄和從它們那里探測(cè)哈希表。這個(gè)插圖顯示了在事實(shí)表掃描中過(guò)濾器的效果。SQL Server 2008查詢執(zhí)行器還可以在執(zhí)行過(guò)程中重新定制位圖,將最想選擇的放在最先,第二想選擇的放在其次,以此類推。這節(jié)省了更多CPU時(shí)間,因?yàn)橐坏┮粋€(gè)真實(shí)表記錄對(duì)位圖檢查失敗,那么這個(gè)記錄就會(huì)被跳過(guò)。
在Microsoft SQL Server 2008企業(yè)版中可以使用新的星型關(guān)聯(lián)最優(yōu)化。在SQL Server中的查詢處理器會(huì)自動(dòng)對(duì)查詢按照星型關(guān)聯(lián)模式應(yīng)用最優(yōu)化,在這樣的評(píng)估查詢成本較低的情況下。你不需要對(duì)你的應(yīng)用程序做任何修改以獲得這個(gè)顯著的性能改進(jìn)。
3.2 分區(qū)表并行
你不想從你所擁有的硬件獲得最高的性能嗎?在SQL Server 2008中的分區(qū)表并行(partitioned table parallelism,PTP)特性能夠幫助你。數(shù)據(jù)倉(cāng)庫(kù)應(yīng)用程序一般收集大量的事實(shí)表歷史數(shù)據(jù),這些數(shù)據(jù)通常按日期分區(qū)。在SQL Server 2005中,接觸不只一個(gè)分區(qū)的查詢對(duì)每個(gè)分區(qū)使用一個(gè)進(jìn)程(并因此一個(gè)處理器內(nèi)核)。這有時(shí)會(huì)限制涉及分區(qū)表的查詢性能,特別是當(dāng)運(yùn)行在具有多個(gè)處理器內(nèi)核的并行共享內(nèi)存多處理器(SMP)計(jì)算機(jī)的時(shí)候。分區(qū)表并行通過(guò)更好地利用現(xiàn)有硬件的處理器能力,改進(jìn)了分區(qū)表的并行查詢計(jì)劃性能,無(wú)論一個(gè)查詢接觸多少分區(qū)。這個(gè)功能默認(rèn)執(zhí)行,不需要手動(dòng)調(diào)整或配置。下圖顯示了在一個(gè)典型數(shù)據(jù)倉(cāng)庫(kù)場(chǎng)景中分區(qū)表并行的影響。
假設(shè)我們有一個(gè)真實(shí)表,它顯示四個(gè)分區(qū)中按照銷售日期組織的銷售數(shù)據(jù),每一個(gè)都包含七天的數(shù)據(jù),如圖表的上部分所顯示。查詢Q 是過(guò)去七天的銷售總和。這個(gè)查詢?nèi)Q于它執(zhí)行的時(shí)間可以作用于不同的分區(qū)。如查詢Q1所示,它接觸一個(gè)單獨(dú)的分區(qū)P2并被Q2接觸,而Q2接觸兩個(gè)分區(qū),因?yàn)橄嚓P(guān)的數(shù)據(jù)在執(zhí)行時(shí)跨過(guò)了P3和P4。
在SQL Server 2005中執(zhí)行Q1和Q2可能會(huì)產(chǎn)生一些意料外的活動(dòng)。因?yàn)橛幸粋€(gè)可以分派所有線程到一個(gè)單獨(dú)的分區(qū)查詢上的特殊情況邏輯,Q1的結(jié)果是由所有可用線程處理、圍繞P3的并行計(jì)劃(執(zhí)行沒(méi)有在圖中顯示)。但是在Q2的情況下,執(zhí)行器將每一個(gè)單獨(dú)線程分派到分區(qū)P3和P4,即使后臺(tái)硬件擁有可用的額外線程。因此在8-way計(jì)算機(jī)上,Q2只利用可用CPU的2/8(25%),而且很可能比Q1執(zhí)行得要慢得多。
在SQL Server 2008中執(zhí)行Q1和Q2會(huì)更好地利用可用硬件,因此具有更好的性能和更可預(yù)測(cè)的動(dòng)作。在Q1的情況下,執(zhí)行器再一次分配所有可用的線程來(lái)處理P2中的數(shù)據(jù)(沒(méi)有顯示)。Q2生成一個(gè)并行計(jì)劃,其中執(zhí)行器以輪流方式指派所有可用線程到P3和P4,它產(chǎn)生的作用在圖中New Allocation下面做了顯示說(shuō)明。CPU仍然是完全利用,而Q1和Q2的性能是差不多的。在這種新的線程輪流指派方式下,分區(qū)表并行提供的性能提高就變得很明顯了,而且更多的處理器內(nèi)核與受一個(gè)查詢影響的分區(qū)數(shù)目是可比的。當(dāng)一個(gè)查詢?cè)L問(wèn)的所有數(shù)據(jù)是在主內(nèi)存緩沖池中——這對(duì)于最近的分區(qū)來(lái)說(shuō)是種典型情況,我們?cè)趯?duì)接觸兩個(gè)分區(qū)的查詢進(jìn)行的內(nèi)部測(cè)試中獲得了16倍或更快的速度。而實(shí)際結(jié)果取決于查詢、數(shù)據(jù)組織和硬件配置。
#p#
3.3 對(duì)齊分區(qū)索引視圖
對(duì)齊分區(qū)索引視圖使你能夠更有效地創(chuàng)建和管理在你關(guān)系型數(shù)據(jù)倉(cāng)庫(kù)中的聚合,并能夠在以前不能有效使用它們的場(chǎng)合中使用它們,改進(jìn)了查詢性能。在一個(gè)典型場(chǎng)景中,你有一個(gè)事實(shí)表,它是按日期分區(qū)的。索引視圖(聚合)定義在這個(gè)表上,以幫助加快查詢。當(dāng)你轉(zhuǎn)到一個(gè)新的表分區(qū)時(shí),定義在分區(qū)表上的對(duì)齊分區(qū)索引視圖的匹配分區(qū)就也轉(zhuǎn)過(guò)去了,并且是自動(dòng)這么做的。
這與SQL Server 2005相比是個(gè)顯著的提高,在SQL Server 2005中你必須在使用ALTER TABLE SWITCH操作以轉(zhuǎn)入或轉(zhuǎn)出一個(gè)分區(qū)之前,刪除所有定義在一個(gè)分區(qū)表上的索引視圖。SQL Server 2008中的對(duì)齊分區(qū)索引視圖特性使你受益于大型分區(qū)表上的索引視圖,同時(shí)節(jié)省了在整個(gè)分區(qū)表上重建聚合的成本。這些受益包括自動(dòng)維護(hù)聚合,以及索引視圖匹配(自動(dòng)查詢重寫以利用聚合解決只涉及基礎(chǔ)表而不涉及聚合的查詢)。
下圖顯示了在一個(gè)分區(qū)里轉(zhuǎn)向時(shí)聚合怎樣隨著基礎(chǔ)表分區(qū)移動(dòng)。
3.4 GROUPING SETS
GROUPING SETS使你可以編寫一個(gè)生成多個(gè)組并返回一個(gè)單獨(dú)結(jié)果集的查詢。這個(gè)結(jié)果集等同于對(duì)不同的分組記錄進(jìn)行UNION ALL。使用GROUPING SETS,你可以關(guān)注于你的業(yè)務(wù)所需要的不同級(jí)別信息(分組),而不僅僅是結(jié)合幾個(gè)查詢結(jié)果的機(jī)制。GROUPING SETS通過(guò)改進(jìn)的查詢性能使你可以很簡(jiǎn)單地編寫具有多個(gè)分組的報(bào)表。
在這個(gè)簡(jiǎn)單但很典型的例子里,使用AdventureWorksDW樣例數(shù)據(jù)庫(kù),你可能會(huì)在制作報(bào)表階段想看看下面的聚合:
◆按季度和國(guó)家統(tǒng)計(jì)的總銷售量
◆所有國(guó)家按季節(jié)統(tǒng)計(jì)的總銷售量
◆總銷售量
如果沒(méi)有GROUPING SETS ,那么你要獲得這個(gè)結(jié)果就必須運(yùn)行多個(gè)查詢,或者如果你想要一個(gè)結(jié)果集的話,使用UNION ALL 結(jié)合這些查詢。有了GROUPING SETS ,你的查詢可以使用如下形式:
SELECT D.CalendarYear, D.CalendarQuarter, T.SalesTerritoryCountry , SUM(F.SalesAmount) AS SalesAmount FROM dbo.FactResellerSales F INNER JOIN dbo.DimTime D ON F.OrderDateKey = D.TimeKey INNER JOIN dbo.DimSalesTerritory T ON F.SalesTerritoryKey = T.SalesTerritoryKey WHERE D.CalendarYear IN (2003,2004) GROUP BY GROUPING SETS ( (CalendarYear, CalendarQuarter, SalesTerritoryCountry) , (CalendarYear, CalendarQuarter) , () ) ORDER BY D.CalendarYear, D.CalendarQuarter, T.SalesTerritoryCountry |
一般情況下,你將這個(gè)查詢的結(jié)果顯示為樞軸表類型,如下所示:
表2: 一個(gè)GROUPING SETS查詢的輸出,格式化為樞軸表
隨著可能的分組數(shù)目的增加,GROUPING SETS 所提供的簡(jiǎn)潔性和性能優(yōu)勢(shì)就越來(lái)越大了。
#p#
3.5 MERGE
MERGE 語(yǔ)句允許你在一個(gè)Transact-SQL語(yǔ)句中對(duì)一個(gè)表或視圖執(zhí)行多個(gè)數(shù)據(jù)庫(kù)操縱語(yǔ)言(DML)操作(INSERT、UPDATE和DELETE)。目標(biāo)表或視圖與一個(gè)數(shù)據(jù)源關(guān)聯(lián)起來(lái),這些DML操作執(zhí)行于這個(gè)關(guān)聯(lián)的結(jié)果。MERGE 語(yǔ)句有三個(gè)WHEN 條件子句,每一個(gè)都使你可以對(duì)結(jié)果集中的一個(gè)給定記錄執(zhí)行一個(gè)專門的DML動(dòng)作:
· 對(duì)于同時(shí)存在于目標(biāo)表和源表中的每一條記錄,WHEN MATCHED 條件子句允許你對(duì)目標(biāo)表中的給定記錄執(zhí)行更新或刪除。
· 對(duì)于存在于源表中而不存在于目標(biāo)表中的每一條記錄,WHEN [TARGET] NOT MATCHED 條件子句允許你插入一條記錄到目標(biāo)表中。
· 對(duì)于存在于目標(biāo)表中而不存在于源表中的每一條記錄,WHEN SOURCE NOT MATCHED 條件子句允許你更新或刪除目標(biāo)表中的給定記錄。
你還可以對(duì)每一個(gè)WHEN條件子句指定一個(gè)搜索條件來(lái)選擇要對(duì)記錄執(zhí)行哪種類型的DML操作。MERGE語(yǔ)句的OUTPUT條件子句包括一個(gè)新的虛擬字段,叫做$action,你可以使用它來(lái)標(biāo)識(shí)執(zhí)行于每一條記錄的DML操作。
在數(shù)據(jù)倉(cāng)庫(kù)環(huán)境中,MERGE 語(yǔ)句用來(lái)執(zhí)行對(duì)緩慢變化維(SCD)有效的插入和刪除操作以及在很多普通場(chǎng)景中維護(hù)真實(shí)表。MERGE 語(yǔ)句比運(yùn)行單獨(dú)的插入、更新和刪除語(yǔ)句具有更好的性能特性,因?yàn)樗灰髠鬟f過(guò)來(lái)數(shù)據(jù)。
SQL Server 2008還推出了一個(gè)對(duì)插入語(yǔ)句的強(qiáng)大擴(kuò)展功能,它允許插入語(yǔ)句使用嵌套INSERT、UPDATE、DELETE或MERGE 語(yǔ)句的OUTPUT 條件子句返回的記錄。
假設(shè)你有一個(gè)DimBook表(ISBN、Price、IsCurrent),它跟蹤一個(gè)書(shū)庫(kù)中每一本書(shū)的歷史價(jià)格記錄和當(dāng)前的價(jià)格。價(jià)格的改變和添加新書(shū)是每周進(jìn)行的。每星期會(huì)生成一個(gè)源表WeeklyChanges (ISBN、Price),這些變更會(huì)應(yīng)用于DimBook 表。每一本新書(shū)都會(huì)插入一條記錄。在這一周改變了價(jià)格的現(xiàn)有書(shū)籍會(huì)以IsCurrent=0進(jìn)行更新,并且會(huì)插入一條新記錄以反映這個(gè)新價(jià)格。下面這個(gè)Transact-SQL 語(yǔ)句使用新的MERGE和INSERT功能執(zhí)行了這些操作。
INSERT INTO DimBook(ISBN, Price, IsCurrent) SELECT ISBN, Price, 1 FROM ( MERGE DimBook as book USING WeeklyChanges AS src ON (book.ISBN = src.ISBN and book.IsCurrent = 1) WHEN MATCHED THEN UPDATE SET book.IsCurrent = 0 WHEN NOT MATCHED THEN INSERT VALUES (src.ISBN, src.Price, 1) OUTPUT $action, src.ISBN, src.Price ) AS Changes(action, ISBN, Price) WHERE action = 'UPDATE'; |
3.6 變化數(shù)據(jù)捕捉
變化數(shù)據(jù)捕捉(CDC)是SQL Server 2008中推出的一個(gè)新的數(shù)據(jù)跟蹤特性。主要是為數(shù)據(jù)倉(cāng)庫(kù)場(chǎng)景設(shè)計(jì)的,改變數(shù)據(jù)捕捉提供了一個(gè)跟蹤和獲取對(duì)用戶表所做的數(shù)據(jù)改動(dòng)的有效機(jī)制,并使你能夠以一種簡(jiǎn)單使用的關(guān)系型格式來(lái)訪問(wèn)變更數(shù)據(jù)。一般情況下,你在一個(gè)操作數(shù)據(jù)庫(kù)中使用CDC來(lái)捕捉變更用于之后轉(zhuǎn)移到你的數(shù)據(jù)倉(cāng)庫(kù)中。在SQL Server中CDC的使用使得不再需要使用插入的方法,例如用戶觸發(fā)器、時(shí)間戳字段、以及高昂的查詢來(lái)確定操作系統(tǒng)中什么發(fā)生了改變。
與變化數(shù)據(jù)一起獲得的輔助信息使得CDC可以提供許多問(wèn)題的答案。例如,這里有一些CDC可以有效提供答案的問(wèn)題集:
◆我想要所有在12:00 A.M.和12:00 P.M 之間改變了的記錄。
◆我想要知道這個(gè)改變是插入、更新、還是刪除。
◆對(duì)于一條更新記錄,我想知道哪個(gè)(些)字段改變了。
CDC可以極為有用的場(chǎng)景之一是提取、轉(zhuǎn)換和加載(ETL)。隨著數(shù)據(jù)量的增加和由于全局操作使得維護(hù)窗口的縮減,優(yōu)化ETL處理變得尤為重要。變化數(shù)據(jù)捕捉為你提供了一個(gè)非常有用的方法在擴(kuò)大的基礎(chǔ)上提取變化,降低整個(gè)ETL處理時(shí)間。
下圖提供了對(duì)變化數(shù)據(jù)捕捉的組成組件概述。
CDC使用一個(gè)捕捉工作從SQL Server事務(wù)日志中提取變更信息,生成變更表。CDC API使你可以編寫一個(gè)應(yīng)用程序用以從變更表中獲得信息。你可以在你的ETL包中使用它。CDC清除工作刪除了變更表中不再需要的信息。
#p#
3.7 最低限度日志記錄INSERT
一般情況下,當(dāng)你往一個(gè)數(shù)據(jù)庫(kù)中寫數(shù)據(jù)時(shí),你必須將它寫到磁盤兩次:一次是寫到日志,一次是寫到它本身數(shù)據(jù)庫(kù)上。這是因?yàn)閿?shù)據(jù)庫(kù)系統(tǒng)使用一個(gè)undo/redo 日志,所以它可以在需要的情況下回滾或重做事務(wù)。但是它只能在某些重要的情況(涉及插入數(shù)據(jù)到現(xiàn)有的表中,從而加速你的ETL處理速度的情況)下將數(shù)據(jù)寫到磁盤一次。這就是SQL Server 2008中新的最低限度日志記錄INSERT特性。
最低限度日志記錄包括只記錄回滾所不支持實(shí)時(shí)恢復(fù)的事務(wù)所需要的信息。最低限度日志記錄只在批量日志記錄和簡(jiǎn)單恢復(fù)模型情況下可用。當(dāng)一個(gè)最低限度日志記錄事務(wù)提交時(shí),會(huì)發(fā)布一個(gè)檢查點(diǎn)用以將臟數(shù)據(jù)頁(yè)面發(fā)送到磁盤并截?cái)嗳罩?。最低限度日志記錄通過(guò)提高性能和降低所需日志空間大小,從而極大地改進(jìn)了大規(guī)模INSERT操作。特別是,你必須對(duì)目標(biāo)表使用表鎖(TABLOCK)。
在SQL 2005中可以最低限度日志記錄的操作包括批量導(dǎo)入操作、SELECT INTO 、以及索引創(chuàng)建和重建。SQL 2008將之?dāng)U展到INSERT INTO…SELECT FROM T-SQL 操作,它在滿足下列條件之一的情況下插入大量記錄到一個(gè)已有的表中:
◆插入記錄到一個(gè)具有集群索引而沒(méi)有非集群索引的空表
◆插入到一個(gè)沒(méi)有索引但是可以是非空的堆里面
一個(gè)使用最低限度日志記錄INSERT的主要場(chǎng)景是:你在特定的文件組上創(chuàng)建一個(gè)空表,所以你可以控制數(shù)據(jù)放置的物理位置。然后你使用INSERT INTO…SELECT FROM 來(lái)組裝它,以一種最低限度日志記錄的形式。這將數(shù)據(jù)放置在你想放置的地方,并且只將它寫到磁盤一次。
3.8 數(shù)據(jù)壓縮
在SQL Server 2008中新的數(shù)據(jù)壓縮特性通過(guò)以可變長(zhǎng)度存儲(chǔ)的形式存儲(chǔ)固定長(zhǎng)度的數(shù)據(jù),以及降低冗余數(shù)據(jù),從而降低了表、索引或它們分區(qū)的子集的大小。能夠節(jié)省的空間大小取決于schema和數(shù)據(jù)的分布?;谖覀兪褂么罅繑?shù)據(jù)倉(cāng)庫(kù)數(shù)據(jù)庫(kù)進(jìn)行的測(cè)試,我們得到的統(tǒng)計(jì)情況是真實(shí)的用戶數(shù)據(jù)庫(kù)的大小會(huì)降低到87%(7比1的壓縮比),但是更多情況下,你可能能降低到50-70%的范圍(壓縮比大約在2比1到3比1之間)。
SQL Server 提供了兩種壓縮類型,如下所示:
◆行壓縮使得可以以可變長(zhǎng)度存儲(chǔ)格式來(lái)存儲(chǔ)固定長(zhǎng)度類型。所以舉例來(lái)說(shuō),如果你有一個(gè)字段數(shù)據(jù)類型為BIGINT,它固定格式為占據(jù)8個(gè)字節(jié)的存儲(chǔ)空間,壓縮之后它使用了可變的字節(jié)數(shù)——從0到8的字節(jié)數(shù)。因?yàn)樽侄沃凳且钥勺冮L(zhǎng)度來(lái)存儲(chǔ)的,而在一個(gè)記錄里每個(gè)字段會(huì)存儲(chǔ)一個(gè)額外的4比特長(zhǎng)度代碼。此外,0和NULL值除了這個(gè)4比特代碼之外不占任何存儲(chǔ)空間。
◆頁(yè)面壓縮是建立于行壓縮的基礎(chǔ)上的。它存儲(chǔ)一次頁(yè)面上普遍使用的字節(jié)格式,然后將這些值引用給各自的字段,通過(guò)這種方法將冗余數(shù)據(jù)的存儲(chǔ)降低到最小。字節(jié)格式標(biāo)識(shí)是不受類型約束的。在頁(yè)面壓縮中,SQL Server使用兩種技術(shù)優(yōu)化頁(yè)面使用的空間。
第一個(gè)技術(shù)是字段。在這種情景下,系統(tǒng)尋找一個(gè)公共字節(jié)格式作為頁(yè)面上記錄的一個(gè)特定字段所有值的一個(gè)前綴。表或索引的所有字段都重復(fù)這個(gè)過(guò)程。計(jì)算得來(lái)的這個(gè)字段前綴值作為一個(gè)錨記錄存儲(chǔ),數(shù)據(jù)或索引記錄將這個(gè)錨記錄作為公共前綴參考,如果可能的話,每一個(gè)字段都這么做。
第二個(gè)技術(shù)是頁(yè)面級(jí)字典。這個(gè)字典存儲(chǔ)字段和行的公共值,并存儲(chǔ)在一個(gè)字典中。然后字段會(huì)被修改以引用字典入口。
壓縮伴隨著額外的CPU成本。這是在你對(duì)壓縮數(shù)據(jù)進(jìn)行查詢或執(zhí)行DML操作時(shí)被耗費(fèi)的。行壓縮耗費(fèi)的相關(guān)CPU成本低于頁(yè)面壓縮,但是頁(yè)面壓縮可以提供更好的壓縮。因?yàn)橛泻芏喾N工作負(fù)載和數(shù)據(jù)格式,所以SQL Server 將壓縮粒度定為分區(qū)級(jí)別。你可以選擇壓縮整個(gè)表或索引或分區(qū)子集。例如,在一個(gè)數(shù)據(jù)倉(cāng)庫(kù)工作負(fù)載中,如果CPU是你的工作負(fù)載的主要成本,但是你想節(jié)省一些磁盤空間,那么你可能希望在不常被訪問(wèn)到的分區(qū)上使用頁(yè)面壓縮,而不壓縮經(jīng)常被訪問(wèn)和操縱的當(dāng)前分區(qū)(一個(gè)或多個(gè))。這降低了總的CPU成本,而所需的磁盤空間稍稍多了一些。如果I/O成本是你的工作負(fù)載的主要成本,或者你需要降低磁盤空間成本,那么使用頁(yè)面壓縮來(lái)壓縮所有的數(shù)據(jù)可能是最好的選擇。如果壓縮使得你經(jīng)常接觸頁(yè)面的工作集緩存在主要內(nèi)存緩沖池中,那它可以將速度提高好幾倍,而如果它是放在內(nèi)存中的話就不會(huì)這樣了。對(duì)一個(gè)用來(lái)測(cè)試SQL Server 2008的大型內(nèi)部數(shù)據(jù)倉(cāng)庫(kù)查詢性能基準(zhǔn)的初步性能測(cè)試結(jié)果顯示節(jié)省了58%的磁盤空間、平均降低了15%的查詢運(yùn)行時(shí)間、以及CPU成本平均提高了20%。而一些查詢速度提高了七倍。你的結(jié)果取決于你的工作負(fù)載、數(shù)據(jù)庫(kù)和硬件。
壓縮數(shù)據(jù)的命令是在CREATE/ALTER DDL語(yǔ)句中作為選項(xiàng)提供的,并且支持ONLINE和OFFLINE 模式。此外,還提供了一個(gè)存儲(chǔ)過(guò)程用來(lái)幫助你在實(shí)際壓縮前估計(jì)能夠節(jié)省的空間。
3.9 備份壓縮
備份壓縮幫助你以多種方式節(jié)省空間。
通過(guò)降低你的SQL備份的大小,你的SQL備份可以節(jié)省很多磁盤媒質(zhì)空間。所有的壓縮結(jié)果依賴于進(jìn)行壓縮的數(shù)據(jù)本身,壓縮到50%不是很少見(jiàn)的,也有可能壓縮到更小。這使得你可以使用較少的存儲(chǔ)以保持你的備份在線,或者使用相同的存儲(chǔ)保持更多的備份版本在線。
備份壓縮還幫助你節(jié)省了時(shí)間。傳統(tǒng)的SQL備份幾乎完全是受I/O性能的限制。通過(guò)降低備份過(guò)程的I/O負(fù)載,我們實(shí)際上加快了備份和恢復(fù)的速度。
當(dāng)然,沒(méi)有什么是完全免費(fèi)的,它在空間和時(shí)間上的降低是以耗費(fèi)CPU為代價(jià)的。好消息是I/O時(shí)間的節(jié)省彌補(bǔ)了CPU時(shí)間的增加,而且你可以利用資源監(jiān)控器控制你的備份以工作負(fù)載為代價(jià)使用多少CPU。
#p#
3.10 資源監(jiān)控器
SQL Server 2008中新的資源監(jiān)控器使你可以控制分配給你的關(guān)系型數(shù)據(jù)庫(kù)工作負(fù)載不同部分的CPU和內(nèi)存資源的數(shù)量。它可以用來(lái)防止失控查詢(它阻止資源分配給其它工作負(fù)載)以及為你的工作負(fù)載重要部分預(yù)留資源。SQL Server 2005資源策略平等地對(duì)待所有的工作負(fù)載,并按需分配共享資源(例如,CPU帶寬、內(nèi)存)。這有時(shí)會(huì)引起資源分配不按比例,從而導(dǎo)致性能不均衡或意料外的速度降低。
資源監(jiān)控器的首要目標(biāo)如下所示:
a. 監(jiān)控:使得可以監(jiān)控每組請(qǐng)求的資源消耗(工作負(fù)載分組)。
b. 可預(yù)測(cè)性:使得能夠?qū)Υ嬖谫Y源競(jìng)爭(zhēng)的環(huán)境中預(yù)測(cè)工作負(fù)載的執(zhí)行。這是通過(guò)顯示制定工作負(fù)載間的資源邊界來(lái)完成的(通過(guò)資源池控制)。資源邊界的使用還能防止或降低查詢失控的可能性。資源監(jiān)控器所提供的監(jiān)控功能使得更容易發(fā)現(xiàn)失控查詢。
c. 優(yōu)先級(jí):使得可以設(shè)置工作負(fù)載優(yōu)先級(jí)。
要理解資源監(jiān)控器,有三個(gè)新的概念是很重要的:工作負(fù)載分組、資源池、分類(和分類器用戶定義的函數(shù))。
◆組:一個(gè)工作負(fù)載組,或組,是一個(gè)用戶指定的請(qǐng)求分類,它與應(yīng)用于每一個(gè)請(qǐng)求的分類規(guī)則類似。組的值存在于資源消耗聚合監(jiān)控和一個(gè)用于組內(nèi)所有請(qǐng)求的統(tǒng)一政策中。組定義了用于它的成員的政策。
◆池:一個(gè)資源池,或池,它顯示了服務(wù)器一部分物理資源。根據(jù)它的設(shè)置,池可以有固定大小(每一個(gè)的最大和最小資源使用設(shè)置是相等的)或者在多個(gè)池之間共享一部分(它的最小小于它可用的最大設(shè)置)。在這種情形下,共享只是意味著資源提供給最先請(qǐng)求資源的池。在默認(rèn)配置下,所有的資源都是共享的,因此維護(hù)向后兼容SQL Server 2005政策。
分類:分類是一組用戶編寫的規(guī)則,使得資源監(jiān)控器可以將請(qǐng)求分類到之前描述的組里面。它是通過(guò)一個(gè)梯度Transact-SQL用戶定義的函數(shù)(UDF)來(lái)執(zhí)行的,UDF旨在作為資源監(jiān)控器的一個(gè)“分類器UDF”。
這些概念在下面的圖片里進(jìn)行了描述。
圖5: 資源監(jiān)控器例子:請(qǐng)求、分類、組,以及池
資源監(jiān)控器可以用在沒(méi)有任何應(yīng)用程序改動(dòng)的情況下。
#p#
4. 集成服務(wù)的改進(jìn)
進(jìn)行ETL將數(shù)據(jù)從你的操作系統(tǒng)中移到你的數(shù)據(jù)倉(cāng)庫(kù)里會(huì)是一個(gè)要求時(shí)間的工作。為了使這個(gè)過(guò)程更快,SQL Server 2008集成服務(wù)(SSIS)推出了兩個(gè)重要的可擴(kuò)展性特性:改進(jìn)的Lookup性能和改進(jìn)的轉(zhuǎn)移管道性能。
4.1 Lookup性能
在SSIS中的Lookup 組件運(yùn)行得更快,并且比在SQL Server 2005中更容易編程。一個(gè)lookup測(cè)試在記錄流里每一行記錄是否在另一個(gè)數(shù)據(jù)集里有一個(gè)相匹配記錄。一個(gè)lookup就像一個(gè)數(shù)據(jù)庫(kù)關(guān)聯(lián)操作。一般情況下,你在整合過(guò)程中使用lookup,例如從源系統(tǒng)獲得信息組裝一個(gè)數(shù)據(jù)倉(cāng)庫(kù)的ETL層。
一個(gè)lookup建立一個(gè)用于保存從探測(cè)數(shù)據(jù)集獲得記錄的緩存。在SQL Server 2005中,Lookup組件只能從特定的OleDb連接里獲得數(shù)據(jù),而且緩存內(nèi)容只能使用一個(gè)SQL查詢來(lái)獲得。在SQL Server 2008中,新版本的Lookup使你可以使用一個(gè)在同一個(gè)包或不同包里的單獨(dú)管道來(lái)生成緩存的內(nèi)容。你可以使用任何地方而來(lái)的源數(shù)據(jù)。
SQL Server 2005在每次使用緩存的時(shí)候?qū)⑺匦录虞d。例如,如果你在同一個(gè)包里面有兩個(gè)管道,每一個(gè)都要求相同的參照數(shù)據(jù)集,每一個(gè)Lookup組件將緩存它自己的拷貝。在SQL Server 2008中,你可以將這個(gè)緩存保存到虛擬內(nèi)存或永久的文件存儲(chǔ)。這意味著在相同的包里面,多個(gè)Lookup組件可以共享相同的緩存。你可以將這個(gè)緩存保存到一個(gè)文件并將它與其它包共享。這個(gè)緩存文件格式為了加快速度進(jìn)行了優(yōu)化,并且對(duì)它的訪問(wèn)比從原始關(guān)系型數(shù)據(jù)源重新加載這個(gè)參照數(shù)據(jù)集要快幾個(gè)數(shù)量級(jí)。
在SQL Server 2008中,Lookup組件推出了不匹配緩存(miss-cache)特性。當(dāng)這個(gè)組件配置為直接對(duì)數(shù)據(jù)庫(kù)進(jìn)行查找時(shí),不匹配緩存特性通過(guò)可選地將在參考數(shù)據(jù)集中的不匹配入口鍵值加載進(jìn)緩存從而節(jié)省了時(shí)間。例如,如果這個(gè)組件從進(jìn)來(lái)的管道得到值123,但是Lookup組件已經(jīng)知道在參考數(shù)據(jù)集里沒(méi)有匹配入口,這個(gè)組件將不會(huì)再在參考數(shù)據(jù)集里查找123。這降低了到數(shù)據(jù)庫(kù)中的一個(gè)多余而又昂貴的旅程。這個(gè)不匹配緩存特性在某些場(chǎng)合下可以將性能提高40%。
其它對(duì)Lookup組件的改進(jìn)之處包括:
◆優(yōu)化的I/O路徑使得緩存加載和查找操作更快速。
◆更直接的用戶界面,簡(jiǎn)化了Lookup組件的配置,特別是緩存選項(xiàng)。
◆輸入中不匹配至少參考數(shù)據(jù)集中的一個(gè)入口的記錄會(huì)被發(fā)送到不匹配輸出。錯(cuò)誤輸出只處理錯(cuò)誤,例如截?cái)唷?/P>
◆在查找轉(zhuǎn)換中的查詢語(yǔ)句可以在運(yùn)行時(shí)做更改,使得編程轉(zhuǎn)換更加靈活。
◆改進(jìn)了信息和錯(cuò)誤消息來(lái)幫助故障排除和性能分析。
下圖描述了一個(gè)使用這個(gè)新Lookup的場(chǎng)景。
數(shù)據(jù)流1從一個(gè)定制源組裝了一個(gè)緩存連接管理器(Cache Connection Manager,CCM),然后數(shù)據(jù)流2使用相同的CCM來(lái)組裝lookup的緩存。這個(gè)圖片還顯示了Lookup組件3個(gè)輸出的使用。
4.2 管道性能
在SQL Server 2008 SSIS 中,幾個(gè)線程可以一起協(xié)作進(jìn)行在SQL Server 2005 SSIS中要求一個(gè)單獨(dú)線程自己進(jìn)行的工作。這使你的ETL性能可以提高幾倍。
在SQL Server 2005 SSIS 中,管道并行是非常粗糙的。當(dāng)用戶有一個(gè)簡(jiǎn)單的包,其中具有一個(gè)或兩個(gè)執(zhí)行樹(shù)時(shí),只會(huì)使用一個(gè)或兩個(gè)處理器,并且這個(gè)包可能不會(huì)獲益于具有幾個(gè)處理器的多處理器機(jī)器。即便是用戶使用多點(diǎn)傳送將數(shù)據(jù)流邏輯上分割,一個(gè)多點(diǎn)傳送的所有輸出路徑頁(yè)屬于同一個(gè)執(zhí)行樹(shù),并且它們由SQL Server 2005 SSIS數(shù)據(jù)流任務(wù)連續(xù)執(zhí)行。
為了獲得高級(jí)并行,在SQL Server 2008 SSIS 中的管道允許更多的并行處理,這意味著使用多處理器機(jī)器可以獲得更高的性能。
通過(guò)使用一個(gè)共享線程池,多點(diǎn)傳送的多個(gè)輸出可以同時(shí)執(zhí)行。簡(jiǎn)要的說(shuō),這個(gè)多點(diǎn)傳送提供了在每一個(gè)輸出上具有一個(gè)可用緩沖的能力,并且不只有一個(gè)緩沖(和一個(gè)可用線程),這個(gè)能力提供給每一個(gè)輸出。你不需要使用“Union All”技巧作為一個(gè)平臺(tái)來(lái)推出更多的并行。
例如,假設(shè)你有一個(gè)包含具有四個(gè)輸出的多點(diǎn)傳送數(shù)據(jù)流。每一個(gè)輸出都流入一個(gè)聚合里。在SQL Server 2005 SSIS 中,同一時(shí)間只處理一個(gè)聚合。在SQL Server 2008 SSIS 中,這四個(gè)聚合可以并行處理。
下圖顯示了增強(qiáng)的SQL Server 2008管道并行是怎樣工作的。
#p#
5. 分析服務(wù)的改進(jìn)
SQL Server 2008分析服務(wù)(SSAS)使用新的塊計(jì)算、寫回和可擴(kuò)展的共享數(shù)據(jù)庫(kù)執(zhí)行特性顯著地提高了查詢速度。管理能力還改進(jìn)了備份更大規(guī)模數(shù)據(jù)庫(kù)的能力。
5.1 MDX查詢性能:塊計(jì)算
在SQL Server 2008 SSAS中改進(jìn)的塊計(jì)算主要通過(guò)只作用于立方體空間的非null值從而加快了MDX查詢處理。它沒(méi)有花費(fèi)時(shí)間評(píng)估null單元。子空間計(jì)算的主要思想通過(guò)與一個(gè)計(jì)算的“本地”逐個(gè)單元評(píng)估相比較可以很好的得出。假設(shè)一個(gè)計(jì)算RollingSum 計(jì)算了上一年和今年的銷售總和,而一個(gè)查詢是查找RollingSum 2005年所有產(chǎn)品的總和。
RollingSum = (Year.PrevMember, Sales) + Sales
SELECT 2005 on columns, Product.Members on rows WHERE RollingSum
這個(gè)計(jì)算的一個(gè)逐個(gè)單元評(píng)估過(guò)程如下圖所示。
[2005, all products]的10個(gè)單元輪流評(píng)估。對(duì)于每一個(gè),我們回到上一年,取得銷售值,并將它添加到今年的銷售里。這個(gè)方法有兩個(gè)明顯的性能問(wèn)題。
首先,如果數(shù)據(jù)是稀疏的,那么即使是會(huì)返回一個(gè)null值的單元也會(huì)被計(jì)算。在這個(gè)例子里,計(jì)算除了Product3和Product6以外的任何一個(gè)單元都是種浪費(fèi)。這個(gè)影響可能極大——在一個(gè)稀疏立方體種,被評(píng)估的單元數(shù)目可能會(huì)相差好幾個(gè)數(shù)量級(jí)。
其次,即使數(shù)據(jù)總的來(lái)說(shuō)是密集的——意味著每一個(gè)單元都有一個(gè)值并且沒(méi)有浪費(fèi)時(shí)間訪問(wèn)空單元,也還是有重復(fù)的工作。每一個(gè)產(chǎn)品都重復(fù)做了相同的工作(例如獲得上一年成員、為上一年單元建立新的上下文、檢查遞歸)。將這個(gè)工作從評(píng)估每一個(gè)單元的內(nèi)部循環(huán)中刪除將會(huì)使得更為高效。
現(xiàn)在假設(shè)使用一個(gè)子空間計(jì)算方法來(lái)執(zhí)行相同的例子。首先,我們以自己的方式建立一個(gè)執(zhí)行樹(shù),確定應(yīng)該填寫哪塊空間。假設(shè)我們需要為下面的查詢計(jì)算空間:
[Product.*, 2005, RollingSum]
假設(shè)有這個(gè)計(jì)算,這意味著我們必須先計(jì)算空間:
[Product.*, 2004, Sales]
接著這個(gè)空間:
[Product.*, 2005, Sales]
然后對(duì)這兩個(gè)空間應(yīng)用‘+’操作符。
銷售是一個(gè)基本測(cè)量,所以我們簡(jiǎn)單獲得存儲(chǔ)引擎數(shù)據(jù)將這兩個(gè)空間填寫在葉子節(jié)點(diǎn),然后生成這個(gè)樹(shù),應(yīng)用這個(gè)操作符填寫根節(jié)點(diǎn)的空間。因此獲得了這個(gè)記錄(Product3,2004,3)以及這兩個(gè)記錄{ (Product3,2005,20),(Product6,2005,5)},并對(duì)它們應(yīng)用了+操作符來(lái)生成結(jié)果。
圖9: 避免對(duì)NULL單元進(jìn)行操作的塊計(jì)算例子
+操作符操作于空間,不是簡(jiǎn)單的數(shù)量值。它結(jié)合兩個(gè)空間以生成一個(gè)包含每個(gè)空間中產(chǎn)品的空間,它的值是它們的總和。
我們只對(duì)可用于結(jié)果的數(shù)據(jù)進(jìn)行操作。我們不打算對(duì)整個(gè)空間執(zhí)行計(jì)算。
#p#
5.2 查詢和回寫性能
回寫操作的性能,以及對(duì)回寫數(shù)據(jù)的查詢,在SQL Server 2008分析服務(wù)中獲得了提高。在分析服務(wù)中的單元回寫是提供給終端用戶在葉子級(jí)或聚合級(jí)更新單元值的能力。單元回寫為每一個(gè)測(cè)量組使用一個(gè)特別的回寫分區(qū),它存儲(chǔ)了最新的單元值和原始值之間的不同(delta)。當(dāng)一個(gè)MDX查詢請(qǐng)求這個(gè)測(cè)量組的單元數(shù)據(jù)時(shí),存儲(chǔ)引擎訪問(wèn)所有分區(qū),包括回寫分區(qū),并將結(jié)果聚合以生成正確的單元值。
在SQL Server 2005和更早的版本中,分析服務(wù)要求回寫分區(qū)具有ROLAP存儲(chǔ)。這通常是單元回寫中發(fā)生性能問(wèn)題的原因,因?yàn)镽OLAP分區(qū)按需查詢關(guān)系型數(shù)據(jù)源以獲得它們的數(shù)據(jù)。在SQL Server 2008中,我們?cè)试S回寫分區(qū)使用MOLAP存儲(chǔ)。從壓縮MOLAP格式獲得回寫數(shù)據(jù)比查詢關(guān)系型數(shù)據(jù)源要快得多。因此,MOLAP回寫分區(qū)具有比ROLAP更好的查詢性能。這個(gè)性能改進(jìn)的多少是很大不同的,并且取決于一些因素,包括回寫數(shù)據(jù)的大小和查詢本身。
MOLAP回寫分區(qū)還應(yīng)該提高了單元回寫性能,因?yàn)榉?wù)器從內(nèi)部發(fā)送查詢來(lái)計(jì)算回寫delta,而這些查詢很可能訪問(wèn)回寫分區(qū)。注意,回寫事務(wù)提交可能會(huì)慢一些,因?yàn)榉?wù)器不只要更新回寫表,還必須更新MOLAP分區(qū)數(shù)據(jù),但是這與獲得的其它性能相比就無(wú)關(guān)緊要了。
5.3 分析服務(wù)加強(qiáng)備份
在SQL Server 2008服務(wù)中你會(huì)發(fā)現(xiàn)其中的一個(gè)性能改進(jìn)是新的備份存儲(chǔ)子系統(tǒng)。現(xiàn)在的備份存儲(chǔ)子系統(tǒng)已經(jīng)重寫了,它使得可以得到更好的性能和可擴(kuò)展性。這個(gè)改變對(duì)于你的應(yīng)用程序來(lái)說(shuō)是透明的——使用它不必改動(dòng)代碼。
新的備份存儲(chǔ)子系統(tǒng)為分析服務(wù)備份文件推出了一個(gè)新的格式。這個(gè)文件名稱擴(kuò)展名沒(méi)有改變。但是,內(nèi)部的格式不同了,所以備份可以很好的升級(jí)到可以處理GB規(guī)模的數(shù)據(jù)庫(kù)。
SQL Server 2008分析服務(wù)備份完全向后兼容SQL Server 2005分析服務(wù)。它使得你可以恢復(fù)在SQL Server 2005分析服務(wù)中備份的數(shù)據(jù)庫(kù)。SQL Server 2008分析服務(wù)不具有以SQL Server 2005分析服務(wù)中所使用的舊格式來(lái)存儲(chǔ)備份的能力。
新的高性能備份存儲(chǔ)子系統(tǒng)允許客戶執(zhí)行新的備份場(chǎng)景。而在以前你需要依靠不成熟的文件系統(tǒng)拷貝工具來(lái)備份大型數(shù)據(jù)庫(kù),現(xiàn)在你可以使用與事務(wù)型系統(tǒng)集成在一起的內(nèi)置備份子系統(tǒng),并且可以與其它操作并行運(yùn)行備份。
5.4 用于分析服務(wù)的可擴(kuò)展共享數(shù)據(jù)
現(xiàn)在你可以就使用一個(gè)單獨(dú)的數(shù)據(jù)庫(kù)拷貝來(lái)升級(jí)你在許多小型服務(wù)器上的OLAP查詢工作負(fù)載。SQL Server 2008分析服務(wù)通過(guò)一個(gè)叫可擴(kuò)展的共享數(shù)據(jù)庫(kù)(SSD)來(lái)支持這么做。
升級(jí)可以應(yīng)用于很多場(chǎng)景和工作負(fù)載,例如處理、查詢、數(shù)據(jù)和緩存管理。對(duì)于分析服務(wù)來(lái)說(shuō),最常見(jiàn)的升級(jí)場(chǎng)景是響應(yīng)不斷增加的并發(fā)用戶數(shù)量,擴(kuò)展多個(gè)服務(wù)器上的查詢負(fù)載。這在過(guò)去是通過(guò)使用一個(gè)負(fù)載平衡解決方案來(lái)實(shí)現(xiàn)的,例如在多個(gè)服務(wù)器前面使用Microsoft Network Load Balancing (NLB)功能以及在服務(wù)器間復(fù)制數(shù)據(jù)。管理這樣的環(huán)境會(huì)遇到許多挑戰(zhàn),而數(shù)據(jù)復(fù)制是主要的一個(gè)。可擴(kuò)展的共享數(shù)據(jù)庫(kù)特性使得數(shù)據(jù)庫(kù)管理員可以將一個(gè)數(shù)據(jù)庫(kù)標(biāo)記為只讀的,并將它從一個(gè)Storage Area Network(SAN)在多個(gè)服務(wù)器實(shí)例間共享,從而不再需要復(fù)制數(shù)據(jù)。這節(jié)省了磁盤空間,以及花費(fèi)在拷貝數(shù)據(jù)上的時(shí)間。
下圖描述了一個(gè)典型的SSD配置。
圖10: 用于分析服務(wù)的可擴(kuò)展共享數(shù)據(jù)庫(kù)
提高性能的一個(gè)可選解決方案是升級(jí),用一個(gè)單獨(dú)的大型服務(wù)器替代多個(gè)小型服務(wù)器。升級(jí)的好處是在一個(gè)更大型的機(jī)器上,單獨(dú)的查詢可以處理的更快。但是通過(guò)SSD使用升級(jí)可以為你節(jié)省硬件(假設(shè)每個(gè)處理器成本更低),并仍然滿足你對(duì)許多多用戶工作負(fù)載的需求。此外,SSD允許你擴(kuò)展為比可以用在一個(gè)單獨(dú)的大型服務(wù)器上更多的處理器。
可擴(kuò)展的共享數(shù)據(jù)庫(kù)特性包含三個(gè)邏輯部分:
◆只讀數(shù)據(jù)庫(kù):允許將一個(gè)數(shù)據(jù)庫(kù)標(biāo)記為只讀的
◆數(shù)據(jù)庫(kù)存儲(chǔ)位置:允許一個(gè)數(shù)據(jù)庫(kù)放在服務(wù)器數(shù)據(jù)文件夾外
◆附加/分離數(shù)據(jù)庫(kù):允許從任何UNC路徑附加或分離數(shù)據(jù)庫(kù)
這些特性一起使得可以查詢升級(jí)場(chǎng)景。然而,每一個(gè)特性都是獨(dú)立的,并且還有查詢擴(kuò)展以外的用法。
用于分析服務(wù)特性的SSD與在SQL Server 2005關(guān)系型數(shù)據(jù)庫(kù)中推出的SSD特性工作方式類似。
#p#
6. 報(bào)表服務(wù)的改進(jìn)之處
SQL Server 2008報(bào)表服務(wù)(SSRS)提供了性能、擴(kuò)展和設(shè)計(jì)改進(jìn),使得它可以很好的滿足你的企業(yè)報(bào)表需求。在這里我們著重介紹兩個(gè)主要的可擴(kuò)展性改進(jìn)。
6.1 報(bào)表可擴(kuò)展性
SQL Server 2008報(bào)表服務(wù)報(bào)表引擎與之前版本相比具有一個(gè)較大的提高,它可以渲染比以前大得多的報(bào)表。盡管這不是數(shù)據(jù)倉(cāng)庫(kù)的一個(gè)重要提高(它在操作性報(bào)表中也可以使用),但是它在一些數(shù)據(jù)倉(cāng)庫(kù)場(chǎng)景中是非常有用的。如果你創(chuàng)建具有幾百甚至上千頁(yè)的報(bào)表,那么SQL Server 2008報(bào)表服務(wù)可以幫助你更快地渲染報(bào)表。而且,在相同的硬件配置下,可以渲染的最大報(bào)表規(guī)模顯著地增加了。
6.2 服務(wù)器可擴(kuò)展性
SQL Server 2008報(bào)表服務(wù)不是運(yùn)行在IIS內(nèi)部。它可以管理它自己的內(nèi)存,并具有它自己的內(nèi)存限制。這使得你可以配置內(nèi)存設(shè)置以便SSRS可以更加高效地與其它服務(wù)運(yùn)行在同一臺(tái)機(jī)器上,例如SQL Server。
7. 總結(jié)
QL Server 提供給你在數(shù)據(jù)倉(cāng)庫(kù)方面所需要的所有東西。在2008版本里,它進(jìn)一步擴(kuò)展,比之前版本都更加可以滿足最大規(guī)模企業(yè)的需求。正如這篇文章里所描述的許多數(shù)據(jù)倉(cāng)庫(kù)改進(jìn)之處,它與之前的版本相比改進(jìn)了很多。你將看到最重要的改變是用于數(shù)據(jù)倉(cāng)庫(kù)建設(shè)、關(guān)系型查詢處理、報(bào)表和分析的、改進(jìn)的可擴(kuò)展性。
【編輯推薦】