[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的價值所在。