用SQL Server 2005構建高性能的數據倉庫(一)

摘要:本文主要討論當架構一個很大的、高性能的數據倉庫,特別是對那種無法預知有多少查詢量的系統時要考慮的一些東西。這個討論包括SQL Server 2005的一些新的特性以及在使用這些特性的時候需要考慮的一些東西。它同時也包括了創建或存儲一個聚合的數據集來使得主流的查詢和報表更加容易。
一.             介紹
有一些具有訪問數據權限的“超級用戶”已經學會了專業的Transact-SQL。SQL Server 2005 報表服務(SSRS)中的報表構造器的便利性擴展到了強大的Transact-SQL查詢的創建,使得更多的用戶使用它時更加容易。他們這種消耗系統資源的能力是無法超越的,在保持一致的性能方面對數據庫管理員(DBA)構成了挑戰。但是,當SQL Server的分析服務(SSAS)被提及的時候,需要用不可預知的方式訪問數據的用戶可能感到他們的查詢效率受到阻礙。因此,你怎樣使得你的商業用戶查詢到他們所需要的東西,也跟給予他們性能很好地查詢以及始終滿足服務級別的協議(SLA)一樣重要。
在過去的幾年中,大量的信息都是圍繞數據倉庫和商業智能(BI)開展的。很大一部分信息聚焦於構建一個數據倉庫或者數據市場來滿足或者超過與制定策略決定相關的商業目標。隨着SQL Server 2005的發佈,1000GB範圍內的相關數據倉庫的實現在它附加的功能中提供了支持。這份白皮書說明了在SQL Server 2005上用一個性能的視角架構一個相關的數據倉庫或者數據市場時包括的最佳實踐。
在這份白皮書中也討論了圍繞硬件選擇方面的一些顯而常見的問題、SQL Server實例和數據庫配置和table/index的設計,它還介紹了爲了交付一個數據市場或數據倉庫來平衡查詢性能時的整體的策略。
相關的數據倉庫的性能常常在更新數據庫和查詢時感覺到。更新操作需要對新的數據進行更多的提取、轉換和載入。DBA有責任儘可能更有效率的設計和維護數據庫。查詢操作也以很多種方式出現,例如終端用戶的查詢、報表服務等。既然分析服務在各種查詢中是最可預測的,白皮書主要聚焦於對相關數據庫倉庫的直接的查詢。
在繼續講之前,我們對已提及到的一些東西做一些假設。用來存儲信息的一些相關的數據倉庫通常是非常大的。數據倉庫和數據市場常常被可替換的使用。但是,數據倉庫更多的跟信息在所有的企業的信息存儲有關。這些數據被清空,並且是以一種正常的方式和很少的直接查詢。相反,它常常使用一致的數據源來爲一種或多種面向主題的數據倉庫直接的服務用戶。在數據市場中的數據雖然能夠以各種方式來設計,但是常常是用一種空間的方式。在工業中,“數據市場”結合在一起變成了“數據倉庫”。
但是,從一致性方面考慮,在這份白皮書中,我們使用“數據倉庫”這個概念作爲包含數據市場的一個通用的概念。
這份白皮書假設讀者已基本熟悉數據倉庫的概念、空間建模、SQL Server 2005表的分離以及索引化的視圖。其中很多的查詢結果比較測試是在項目REAL的數據庫中進行的。項目REAL是一個在SQL Server 2005上的真實的數據倉庫的參考實現。
二、創建一個可靠的基礎
創建一個高性能的數據倉庫的關鍵是懂得那些數據,以及知道用戶是怎樣查詢數據庫的。後者常常有着很大變化,因此很有必要根據查詢模式的改變來持續的進行一些調整。有一些基礎組織的決定對系統的性能產生巨大影響。
1.       硬件方面的考慮
硬件方面的決定常常做得早於系統的任何一個重要的方面。爲相關的數據倉庫選擇硬件是很具有技巧的一件事。這對於滿足那些超級用戶的報表需求變得更加常用。
64位的平臺因爲它的可擴展的存儲架構給數據倉庫提供了很多的優點。數據倉庫支持讀取GB級和TB級數據級的存儲要求。這種平臺消除了32位的平臺上的一些顧慮,但是又具有32位平臺的所有優點。對於數據倉庫來說更加是這樣,因爲數據倉庫存儲和查詢非常大的數據庫。
在選擇64位平臺時,還需要考慮是使用x64還是IA64。做考慮之前需要考慮很多因素。在SQL Server中完全支持x64,並且爲數據倉庫提供了很多好的選項。目前,IA64硬件提供更多的可量測性,但是x64平臺很快趕上了它。記住IA64是完全不同的一種芯片結構(它支持數據倉庫中常見的平行化和改善計算邏輯)是非常重要的。既然這兩種芯片架構很快的發展,因此最好還是好好地學習一下當前的提供情況。在TPC的網址(http://www.tpc.org/tpch/results/tpch_perf_results.asp)上提供了參考。
除了芯片架構之外,處理機的數量和速度也是很重要的一個方面。數據倉庫需要很大數量的平行化的需求,這與處理器的速度和時鐘速度是有很大關係的。在實現數據從倉庫之前很難估計實際的需求。一個很好的方法是不僅僅確立一個開始的基線,也要識別硬件和架構。
2.       磁盤的配置
數據倉庫的磁盤的配置也是很重要的一個因素。數據倉庫動輒就需要TB級的I/O操作。如果這些信息恰好很少查詢,I/O在我們的環境中將會是一個很大的因素。I/O仍然是硬件系統中的一個最慢的方面,因此爲了能夠正確的購買和配置磁盤子系統,需要進行周密的計劃。存儲範圍網絡(Storage Area Network:SAN)仍然是大型數據庫(例如數據倉庫)的一個理想的選擇。在考慮SAN時需要考慮不同的文件類型(tempdb、數據文件和日誌文件等)的特徵,以便磁盤子系統能夠得到正確的設計。磁盤配置的一些基本的最佳實踐如下:
(1)      創建更多的SAN磁盤組來支持來自SQL Server的多重的和平行的I/O。每一個磁盤組由不同的磁盤數組組成並且基於數據的類型(工作的數據、歷史數據、日誌和Tempdb)配置;
  (2)        考慮SAN賣方基於I/O等級的推薦;
(3) 爲了保證在每一部分失敗時能夠恢復的分離,需要將數據和日誌文件放在不同的磁盤組中進行;
(4)     將tempdb數據文件和日誌文件放在不同的磁盤組中;
(5)       保證數組從大數量的物理磁盤中構建,但是沒有充滿在控制器中;
l         大表通常經歷了大範圍的讀取,從大數量的磁盤到均勻的分配I/O。
當定義RAID需求的時候,OLTP的對於數據倉庫環境的一些最佳實踐派上了用場。Tempdb是一些重要的數據庫,這些數據庫必須與在RAID序列的其他的數據庫文件分開存放。
當你架構一個數據倉庫的時候,需要富有創造力的考慮這些數據。特別是當你具有OLTP背景的時候。記住,即使數據庫巨大,也很少一部分是很規則的被更新。
爲了決定創新性的架構需要看看用戶的查詢需求。
網絡需求常常有很大不同。雖然查詢能在很大數據範圍內得到過濾,返回給客戶端的最終結果集常常是很小的。當一個分離的應用程序在相關的數據倉庫和終端用戶數據之間被插入時會發生異常。這個應用程序可能是OLAP服務器,例如分析服務等。這些應用程序趨向於從SQL Server中請求大數量的數據,在兩個服務器見請求高速度的網絡連接。
3.       SQL Server的配置
一旦購買了合適的硬件,爲了充分的發揮SQL Server的潛能,對其進行配置變得很重要。SQL Server是被設置爲自和諧的,因此,在很多情況下,要做的事情只是留下不同的配置值。但是這個規則中也有一些例外的情況,例如在數據庫佈局方面的一些建議等,這些在本小節中將進行講述。
將數據倉庫的服務器與其它的應用程序或數據庫共用一個服務器是不明智的。資源利用的不一致使得很難對應用程序數據庫提供一致的性能。
首先考慮一些存儲器的配置。在很多情況下,通常選擇的是64位的平臺,因爲相關數據倉庫的存儲量的高需求。AWE(Address Windowing Extensions)能從邏輯上增加32位平臺的存儲條,但是它引入了存儲映射,這在64位平臺上是被避免的。
“Max Degree of Parallelism”選項告訴SQL Server在一次單獨的查詢執行操作中平行化程度的最大程度。默認值0告訴SQL Server在運行時才決定其值。當一個平行化的計劃爲了一個查詢產生時,查詢優化器基於當前在運行時所獲得的處理器決定。
一個經常被忽略的SQL Server選項是“query governor cost limit”,這個屬性表示當查詢超過多少時將拒絕執行。默認值0表示所有的查詢都將被執行。
CPU和I/O也常常由SQL Server實例指定。不像在服務器上的共享服務資源的其它應用程序, 它們必須不使用。這個配置在一些很小的數據倉庫中是強烈推薦不使用的。
4.       Tempdb
tempdb數據庫是數據倉庫中的重要組件。數據倉庫查詢趨向於執行分組的、排序的和聚合的大數量的行。依賴於存儲資源、索引和查詢結構,很多需求是在tempdb上的。
配置tempdb的第一步是儘可能的將其置於最有效的磁盤上。
第二步是爲tempdb確定一個合適的磁盤容量,使得其能夠在查詢環境中適應。
5.       數據庫配置
(1)     
數據庫鎖爲了數據庫的一致性而使用,保證數據更新操作是原子的、一致性的、隔離的和持久化的。數據一致性的概念僅僅在更新發生的時候使用。
(2)      及時的文件初始化
SQL Server 2005能夠通過及時的文件初始化的方式快速的創建或者增加數據庫的大小。及時的文件初始化也對數據庫文件的自動增長有用。但最好還是決定一個大小。
(3)      自動收縮
關閉自動收縮通常是一個最佳實踐。如果新的業務需求降低了需要保持的大量數據,數據庫能夠手動的收縮。關閉自動收縮阻止了數據庫在數據存檔後的收縮。
(4)      自動更新統計
在一個數據倉庫中的批量更新很少觸發過時的統計。在SQL Server 2005中,統計能夠異步的更新,並且查詢能夠觸發它們同時在老的統計中編譯和運行。這意味着在老的統計中的查詢編譯,常常已經足夠好。這時候推薦打開“自動更新統計”。
(5)      磁盤佈局
對磁盤上的表進行佈局的最佳實踐是僅僅對系統對象使用主文件組,並且爲剩下的項使用顯示定義的文件組。
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章