使用SQL Server 2008進行優(yōu)化性能
現(xiàn)今的公司需要易訪問且可用性好的商業(yè)數(shù)據(jù),以便他們可以在全球市場中獲得一席之地。與易訪問數(shù)據(jù)的這個需求相呼應(yīng),關(guān)系數(shù)據(jù)庫和分析數(shù)據(jù)庫在規(guī)模方面繼續(xù)發(fā)展,內(nèi)嵌數(shù)據(jù)庫和許多產(chǎn)品一起出現(xiàn),并且許多公司將服務(wù)器合并來減輕管理工作。當公司的數(shù)據(jù)環(huán)境在規(guī)模和復雜度方面持續(xù)發(fā)展的同時,他們必須維護***的性能。
本文描述了SQL Server 2008的性能和擴展能力,并解釋了你可以怎樣使用這些功能來實現(xiàn):
◆使用可用于數(shù)據(jù)庫引擎、分析服務(wù)、報表服務(wù)和集成服務(wù)的工具和功能來優(yōu)化任何規(guī)模的數(shù)據(jù)庫性能。
◆擴展你的服務(wù)器來充分利用新的硬件能力。
◆擴展你的數(shù)據(jù)庫環(huán)境來優(yōu)化響應(yīng)速度并使你的數(shù)據(jù)更易于用戶訪問。
使用SQL Server 2008優(yōu)化性能
由于公司數(shù)據(jù)在規(guī)模和復雜度方面繼續(xù)發(fā)展,你必須采取行動來提供***的數(shù)據(jù)訪問時間。SQL Server 2008包括許多特性和增強的功能來優(yōu)化所有方面的性能,包括關(guān)系型聯(lián)機事務(wù)處理(OLTP)數(shù)據(jù)庫;聯(lián)機分析處理(OLAP)數(shù)據(jù)庫;報表;數(shù)據(jù)抽取、轉(zhuǎn)換和加載(ETL)處理。
關(guān)系型數(shù)據(jù)庫的性能
在大多數(shù)商業(yè)環(huán)境中,關(guān)系型數(shù)據(jù)庫是業(yè)務(wù)關(guān)鍵應(yīng)用程序和服務(wù)的核心所在。隨著數(shù)據(jù)量的增長,以及依賴于關(guān)系數(shù)據(jù)存儲的用戶和應(yīng)用程序數(shù)目的增長,公司必須能夠確保他們的數(shù)據(jù)系統(tǒng)具有一致的性能和響應(yīng)。SQL Server 2008提供了一個強大的數(shù)據(jù)庫引擎,它支持大型關(guān)系數(shù)據(jù)庫和復雜的查詢處理。
可測量的實際性能
SQL Server 2008建立在之前SQL Server 版本的行業(yè)領(lǐng)先的性能之上,給你的公司提供了***級的標準數(shù)據(jù)庫性能。使用事務(wù)處理性能委員會的TPC-C基準示范了SQL Server 的高性能,Microsoft是***個發(fā)布更新的TCP-E基準結(jié)果的數(shù)據(jù)庫銷售商,這更精確地表現(xiàn)了現(xiàn)在公司里普遍存在的OLTP工作負載的種類。
此外,SQL Server 通過一個創(chuàng)記錄的3GB的TPC-H結(jié)果顯示了它對大范圍的數(shù)據(jù)倉庫工作量的執(zhí)行能力,這表明了SQL Server 2008基礎(chǔ)的擴展能力和性能。
高性能的查詢處理引擎
SQL Server 的高性能查詢處理引擎幫助用戶將他們的應(yīng)用程序性能提高到***。這個查詢處理引擎評估查詢,并產(chǎn)生基于動態(tài)維護的、關(guān)于索引和密鑰選擇及數(shù)據(jù)量統(tǒng)計的***查詢執(zhí)行計劃。你可以在SQL Server 2008中鎖定查詢計劃以確保普通查詢執(zhí)行時的穩(wěn)定性能。查詢處理引擎還可以利用多核或多處理器系統(tǒng),并生成能夠利用并行性進一步提高性能的執(zhí)行計劃。
一般情況下,在查詢性能方面***的瓶頸是磁盤I/O。SQL Server的動態(tài)緩存能力降低了對物理磁盤的訪問次數(shù),并且查詢處理引擎使用預(yù)讀取掃描來預(yù)測一個給定的計劃所需的數(shù)據(jù)頁面,并預(yù)先將它們讀取到緩存里,這可以顯著地提高整個性能。另外,SQL Server 2008支持本地數(shù)據(jù)壓縮,從而可以降低必須讀取的數(shù)據(jù)頁面的數(shù)量,并提高了I/O 工作負載的性能。
SQL Server 2008支持表和索引的分割,這使得管理員可以將同一個表或索引分配到單獨的物理存儲設(shè)備上,從而通過多個文件組來控制數(shù)據(jù)的物理存放位置。在SQL Server 2008中針對查詢處理引擎的優(yōu)化使得它可以并行地訪問分區(qū)數(shù)據(jù),并顯著提高了性能。
性能優(yōu)化工具
SQL Server 2008包含SQL Server Profiler 和Database Engine Tuning Advisor。通過使用SQL Server Profiler,你可以捕捉應(yīng)用程序典型負載中所發(fā)生的事件,然后在Database Engine Tuning Advisor 中將這些事件重現(xiàn),從而針對數(shù)據(jù)的索引和分區(qū)生成相應(yīng)建議,這樣你就可以優(yōu)化應(yīng)用程序的性能了。
在創(chuàng)建了最適合你的應(yīng)用程序的工作負載的索引和分區(qū)之后,你可以使用SQL Server Agent來制定一個自動的數(shù)據(jù)庫維護計劃。這個自動的維護會定期的重新組織或重建索引,并更新索引和選擇統(tǒng)計,以確保當數(shù)據(jù)插入和修改你的數(shù)據(jù)庫的物理數(shù)據(jù)頁面片段時一直提供***的性能。
Resource Governor
通常,一個單獨的服務(wù)器用來提供多個數(shù)據(jù)服務(wù)。在一些情況下,許多應(yīng)用程序和工作負載依賴于同一個數(shù)據(jù)源。在目前所流行的服務(wù)器合并的趨勢下,要為一個給定的工作負載提供可預(yù)測的性能是很困難的,因為同臺服務(wù)器上的其它工作負載會競爭系統(tǒng)資源。在一個單獨的服務(wù)器上有多個工作負載,管理員必須避免出現(xiàn)某些問題,例如使其它工作負載一直等待系統(tǒng)資源的失效查詢,或者低優(yōu)先級的工作負載反過來影響高優(yōu)先級的工作負載。SQL Server 2008提供了Resource Governor,它使得管理員可以對運行在一個SQL Server實例上的各個工作負載定義和分配優(yōu)先級。工作負載基于如用戶、應(yīng)用程序和數(shù)據(jù)庫等因素,通過對資源定義限制,管理員可以將失效查詢的可能性降至***,還可以限制獨占資源的工作負載。通過設(shè)置優(yōu)先級,管理員可以優(yōu)化一個關(guān)鍵任務(wù)的處理性能,同時維護服務(wù)器上其它工作負載的可預(yù)測性。
性能套件
SQL Server 2008提供了性能套件,它是一套用來收集、分析、排除故障和存儲SQL Server 2008診斷信息的集成框架。性能套件為性能監(jiān)控提供了一個端對端的解決方案,其中包括針對性能數(shù)據(jù)的低開銷收集、集中化存儲、以及分析報表。你可以使用SQL Server 2008管理套件來管理收集工作,例如可以使用數(shù)據(jù)收集器、啟動一個收集集合并查看作為性能狀態(tài)面板的系統(tǒng)收集集合報表。你還可以使用系統(tǒng)存儲結(jié)構(gòu)和性能套件應(yīng)用程序編程接口(API)來建立你自己的基于性能套件的性能管理工具。
性能套件提供了一個統(tǒng)一的數(shù)據(jù)收集基礎(chǔ)架構(gòu),它在每一個你想監(jiān)控的SQL Server實例中都有一個數(shù)據(jù)收集器。這個數(shù)據(jù)收集器非常靈活,它可以管理數(shù)據(jù)收集范圍以適應(yīng)開發(fā)、測試和生產(chǎn)環(huán)境。你使用這個數(shù)據(jù)收集框架就可以輕松地收集性能數(shù)據(jù)和一般的診斷數(shù)據(jù)。
該數(shù)據(jù)收集器基礎(chǔ)設(shè)施推出了以下新的概念和定義:
◆數(shù)據(jù)提供商。性能或診斷信息的來源可以包括SQL Trace 、性能計數(shù)器和Transact-SQL查詢(例如,從分布式的管理視圖中獲得數(shù)據(jù))。
◆收集器類型。一個邏輯封裝,它提供了從數(shù)據(jù)提供商處收集數(shù)據(jù)的機制。
◆收集項目。一個收集器類型的實例。當創(chuàng)建一個收集項目時為這個項目定義輸入屬性和收集頻率。一個收集項目不能單獨存在。
◆收集集合。數(shù)據(jù)收集的基本單位。一個收集集合是一組收集項目的集合,它們在一個SQL Server 實例上定義和部署。收集集合可以各自獨立運行。
◆收集模式。一個收集集合中數(shù)據(jù)收集和存儲的方式。這個收集模式可以設(shè)置為緩存或不緩存。收集模式將影響用于該收集集合的工作和時間表的類型。
◆數(shù)據(jù)收集器是可擴展的,它可以添加新的數(shù)據(jù)提供者。
當配置數(shù)據(jù)收集器時,會創(chuàng)建一個默認名稱為MDW的關(guān)系數(shù)據(jù)庫作為管理數(shù)據(jù)倉庫,其中將存儲收集來的數(shù)據(jù)。這個數(shù)據(jù)庫可以和數(shù)據(jù)收集器放在同一個系統(tǒng)上,或者放在一個單獨的服務(wù)器上。管理數(shù)據(jù)倉庫中的對象包括以下三種預(yù)配置的模式,其作用各不相同:
◆Core 模式 - 包括用于組織和標識收集到的數(shù)據(jù)的表和存儲過程。
◆Snapshot 模式 - 包括數(shù)據(jù)表、視圖和其它對象,用于支持標準的收集器類型的數(shù)據(jù)。
◆Custom_Snapshot 模式 - 可以創(chuàng)建新的數(shù)據(jù)表來支持用戶定義的、按標準的、以及擴展的收集器類型所創(chuàng)建的收集集合。
性能套件提供了一組強大的預(yù)先配置的系統(tǒng)收集集合,包括Server Activity、 Query Statistics 和Disk Usage,來幫助你快速分析所收集的數(shù)據(jù)。通常使用◆Server Activity 系統(tǒng)收集集合來開始監(jiān)控和故障排除。在SQL Server管理套件中發(fā)布了一組與每一個系統(tǒng)收集集合相關(guān)的報表,你可以將這些報表作為性能狀態(tài)面板來幫助你分析數(shù)據(jù)庫系統(tǒng)的性能,如圖1所示。
數(shù)據(jù)倉庫和分析性能
數(shù)據(jù)倉庫環(huán)境必須能夠滿足數(shù)量不斷發(fā)展的數(shù)據(jù)和用戶需求,并維護***的性能。隨著數(shù)據(jù)倉庫查詢變得越來越復雜,查詢的每一部分都必須進行優(yōu)化以維護可以接受的性能。在SQL Server 2008中,查詢優(yōu)化器可以動態(tài)地導入一個***的位圖過濾器來加強星型模式(star schema)的查詢性能。此外,SQL Server 2008支持數(shù)據(jù)分割、高級索引功能和索引視圖來支持更大型的數(shù)據(jù)存儲,還有稀疏列和有效的數(shù)據(jù)類型,例如VARDECIMAL,對于包含大量 NULL 值的大型表,它可以降低相關(guān)開銷(數(shù)據(jù)倉庫的一個普通特性)。
分析服務(wù)應(yīng)用程序需要大型且復雜的計算。寶貴的處理器時間浪費在計算解決 NULL 或零數(shù)據(jù)的聚合上。在SQL Server 2008分析服務(wù)中的塊計算使用默認的值,將要計算的表達式的數(shù)目降至***,并將單元導航限制為整個空間只有一次,而不是每個單元一次,從而顯著提高了計算性能。
盡管多維度OLAP(MOLAP)分區(qū)提供了更好的查詢性能,但是需要用到回寫功能的公司之前都需要使用關(guān)系型OLAP (ROLAP)分區(qū)來維護回寫表。SQL Server 2008增加了對MOLAP分區(qū)執(zhí)行回寫操作的能力,這消除了由維護ROLAP回寫表所引起的性能下降的問題。
報表服務(wù)性能
SQL Server 2008報表服務(wù)引擎被重新開發(fā),以便通過按需處理過程對報表服務(wù)添加更好的性能和可擴展性。報表不再局限于內(nèi)存,因為現(xiàn)在報表處理使用一個文件系統(tǒng)緩存來緩解內(nèi)存的壓力。報表處理還可以適應(yīng)其它消耗內(nèi)存的處理。
一個新的渲染架構(gòu)解決了之前的渲染器版本中存在的內(nèi)存利用問題。這些新的渲染器還提供了一些改進,例如對CSV渲染器添加了一個真實數(shù)據(jù)渲染器,并支持在Excel渲染器中內(nèi)置數(shù)據(jù)塊和內(nèi)置子報表。
集成服務(wù)性能
ETL處理常常用來在企業(yè)數(shù)據(jù)庫源中添加業(yè)務(wù)數(shù)據(jù)和更新數(shù)據(jù)倉庫中的數(shù)據(jù)。過去,許多公司只需要將歷史數(shù)據(jù)和不常使用的數(shù)據(jù)恢復到數(shù)據(jù)倉庫中?,F(xiàn)在,許多公司想要從數(shù)據(jù)倉庫中獲得接近于實時的數(shù)據(jù)。隨著數(shù)據(jù)量的增加和要求數(shù)據(jù)倉庫刷新頻率的增加,ETL處理時間和靈活性就變得更加重要了。
數(shù)據(jù)刷新要求SQL Server集成服務(wù)使用查找來比較源記錄和數(shù)據(jù)倉庫中的數(shù)據(jù)。集成服務(wù)實現(xiàn)了顯著改進的查找性能,它降低了包運行時間并優(yōu)化了ETL操作。傳統(tǒng)ETL處理的另一個問題是確定源數(shù)據(jù)庫中的什么數(shù)據(jù)被修改了。管理員不得不非常謹慎地避免重復已有的數(shù)據(jù)。一些管理員選擇刪除所有的數(shù)據(jù)值重新加載數(shù)據(jù)倉庫,而不是管理已被修改的數(shù)據(jù),這使得ETL 處理的開銷更大。SQL Server 2008具有變更數(shù)據(jù)捕獲(Change Data Capture, CDC) 功能來記錄對變更表的更新,當數(shù)據(jù)刷新按計劃進行時,可以實現(xiàn)對數(shù)據(jù)變更的跟蹤并確保數(shù)據(jù)倉庫的一致性。
【編輯推薦】