Kimberly L. Tripp
SQLskills.com 的創始人
適用於:
SQL Server 2005
摘要:SQL Server 2005 中基於表的分區功能為簡化分區表的創建和維護過程提供了靈活性和更好的性能。追溯從邏輯分區表和手動分區表的功能到最新分區功能的發展歷程,探索為什麼、何時以及如何使用 SQL Server 2005 設計、實現和維護分區表。(本文包含一些指向英文站點的鏈接。)
關於本文本文所描繪的功能和計劃是下一版本 SQL Server 的開發方向。它們並非本產品的説明書,如有更改,恕不另行通知。對於最終產品是否具有這些功能不做任何明示或暗示的保證。對於某些功能,本文假設讀者熟悉 SQL Server 2000 功能和服務。有關背景信息,請訪問SQL Server 網站或 SQL Server 2000 資源工具包。這並不是產品説明書。
本頁內容
為什麼要進行分區?
什麼是分區?為什麼要使用分區?簡單的回答是:為了改善大型表以及具有各種訪問模式的表的可伸縮性和可管理性。通常,創建表是為了存儲某種實體(例如客户或銷售)的信息,並且每個表只具有描述該實體的屬性。一個表對應一個實體是最容易設計和理解的,因此不需要優化這種表的性能、可伸縮性和可管理性,尤其是在表變大的情況下。
大型表是由什麼構成的呢?超大型數據庫 (VLDB) 的大小以數百 GB 計算,甚至以 TB 計算,但這個術語不一定能夠反映數據庫中各個表的大小。大型數據庫是指無法按照預期方式運行的數據庫,或者運行成本或維護成本超出預定維護要求或預算要求的數據庫。這些要求也適用於表;如果其他用户的活動或維護操作限制了數據的可用性,則可以認為表非常大。例如,如果性能嚴重下降,或者每天、每週甚至每個月的維護期間有兩個小時無法訪問數據,則可以認為銷售表非常大。有些情況下,週期性的停機時間是可以接受的,但是通過更好的設計和分區實現,通常可以避免或最大程度地減少這種情況的發生。雖然術語 VLDB 僅適用於數據庫,但對分區來説,瞭解表的大小更重要。
除了大小之外,當表中的不同行集擁有不同的使用模式時,具有不同訪問模式的表也可能會影響性能和可用性。儘管使用模式並不總是在變化(這也不是進行分區的必要條件),但在使用模式發生變化時,通過分區可以進一步改善管理、性能和可用性。還以銷售表為例,當前月份的數據可能是可讀寫的,但以往月份的數據(通常佔表數據的大部分)是隻讀的。在數據使用發生變化的類似情況下,或在維護成本隨着在表中讀寫數據的次數增加而變得異常龐大的情況下,表響應用户請求的能力可能會受到影響。相應地,這也限制了服務器的可用性和可伸縮性。
此外,如果以不同的方式使用大量數據集,則需要經常對靜態數據執行維護操作。這可能會造成代價高昂的影響,例如性能問題、阻塞問題、備份(空間、時間和運營成本),還可能會對服務器的整體可伸縮性產生負面影響。
分區可以帶來什麼幫助?當表和索引變得非常大時,分區可以將數據分為更小、更容易管理的部分,從而提供一定的幫助。本文重點介紹橫向分區,在橫向分區中,大量的行組存儲在多個相互獨立的分區中。分區集的定義根據需要進行自定義、定義和管理。Microsoft SQL Server 2005 允許您根據特定的數據使用模式,使用定義的範圍或列表對錶進行分區。SQL Server 2005 還圍繞新的表和索引結構設計了幾種新功能,為分區表和索引的長期管理提供了大量的選項。
此外,如果具有多個 CPU 的系統中存在一個大型表,則對該表進行分區可以通過並行操作獲得更好的性能。通過對各個並行子集執行多項操作,可以改善在極大型數據集(例如數百萬行)中執行大規模操作的性能。通過分區改善性能的例子可以從以前版本中的聚集看出。例如,除了聚集成一個大型表外,SQL Server 還可以分別處理各個分區,然後將各個分區的聚集結果再聚集起來。在 SQL Server 2005 中,連接大型數據集的查詢可以通過分區直接受益;SQL Server 2000 支持對子集進行並行連接操作,但需要動態創建子集。在 SQL Server 2005 中,已分區為相同分區鍵和相同分區函數的相關表(如 Order 和 OrderDetails 表)被稱為已對齊。當優化程序檢測到兩個已分區且已對齊的表連接在一起時,SQL Server 2005 可以先將同一分區中的數據連接起來,然後再將結果合併起來。這使 SQL Server 2005 可以更有效地使用具有多個 CPU 的計算機。