[SQL SERVER][Performance]善用Partition Table#1簡介

[SQL SERVER][Performance]善用Partition Table#1簡介

小弟最近剛好幫朋友解決了一個效能上的問題,使用Partition Table改善傳統資料維護作業效率。

Partition Table不管是在Oracle(Enterprise版本)或SQL Server都是屬於企業級的技術(Enterprise或developer 版本)

Oracle partition talbe11g新增滿多功能,使用過Oracle partition table後會覺得SQL Server功能似乎有點少

Oracke11g增加partition advisor、system parition和interval partition...等(oracle說太多~XD,回歸主題)

anyway~~小弟個人認為使用Enterprise版本,則應該好好利用相關進階技術

改善以往資料庫所遇到的瓶頸,不然雖使用企業版資料庫,卻只發揮Express版功用

我想老闆會說:那不如安裝Express,還可以省下一大筆授權費用。

這篇簡單介紹一下SQL Server Partition Table

 

簡介:

Partition table應用在資料龐大的Table和index,可以提升管理性和讀寫效能

同時也可以維護資料完整性,SQL2008資料以水平分割

table和index都會被視為單一邏輯實體(單一index and partition table必須在同一資料庫中)

分割大型資料表或索引將更易於管理,因為分割可讓您快速和有效率地管理和存取資料子集

同時又可維護資料集合的完整性。透過使用資料分割可以縮短作業時間

在資料子集上執行的維護作業也將會更有效率,因為這些作業只處理所需的資料,而非整個資料表。

 

為什麼要使用partition table

為了提高讀寫性能,提高資料庫的效率

 

什麼狀況該使用partition table?

一般來說下列條件成立就可能適用partition talbe

1. 資料表包含或應包含以不同方式使用的許多資料

2. 針對資料表的查詢或更新並未如預期執行,或是維護成本超過預先定義的維護期限。

例如,如果目前月份的資料主要是使用 INSERT、UPDATE、DELETE 和 MERGE 作業

而前面的月份主要是使用 SELECT 查詢,如果能以月份分割此資料表,管理起來會比較容易

如果在資料表上的一般維護作業只需針對資料子集,此優點可能特別有用

如果未分割資料表,這些作業可能在整個資料集上耗用許多資源。透過資料分割

像索引重建和重組等維護作業可在單一月份的唯寫資料上執行,而唯讀資料仍然可在線上存取。

 

使用partition table一定可以提高效率嗎?

Partition talbe並不一定總能提高效率(水能載舟亦能覆舟),這和實際資料分部和查詢條件情況有關係。
partiton table技術概念,是把一大塊table切割成n小塊

這樣查詢的時候可以很快定位到某一小塊上(減少IO),另一方面CPU比硬碟IO快很多倍

而又有多個硬碟(多讀寫頭),或者是RAID,可讓資料庫有效應用CPU同時去讀寫不同的硬碟,這樣才有可能提高效率。
但有些時候並不是這樣,這又要考慮前端的SQL語法where條件

假如用時間分區,而我用時間來查詢,這樣一定可以提高查詢效率

但如果是要查某樣產品在最近三年內的銷售狀況的話,這樣效能就不一定會提高

因為資料分佈在不同的分區上(須跨分區掃描並計算)。

 

相關system views

contains details for each partitioning function

sys.partition_functions
contains data for each value range used in the partitiong functions

sys.partition_range_values
contains associations to map partitions to filegroups

sys.destination_data_spaces

contains filegroup (which is a data space) details
sys.filegroups

小弟只是簡單介紹(還有partiton index),更多更詳細的資訊可參考MSDN Library

資料分割資料表與索引

資料表與索引組織

 

下篇我將測試patition table所帶來的效率

原本要花3個多小時的資料維護作業,利用Partition Table後,整個流程30分鐘內搞定(準時下班閃人XD)

也終於有感受到花大錢買企業版的好處,以及SQL2000升級SQL2008的價值所在。