SQL Server 2008數據壓縮的正確執行
下面的文章主要介紹的是正確執行SQL Server 2008數據壓縮的實際操作流程,在實際操作中我們對SQL Server 2008數據庫的新功能進行觀察時,我們發現一個叫做數據壓縮的可能很有趣的功能,我們可以用這個功能來縮小表,索引或者它們分區的一個子集。
您能給我們提供如何利用這個新功能的詳細解釋嗎?
專家解答
在SQSQL Server 2008數據壓縮在SQL Server 2005 的Service Pack 2中已經可以使用了,在Service Pack 2中,引進了存儲小數和數字數據。Vardecimal存儲格式允許小數和數字數據類型以變長的形式存儲。這個概念在SQL Server 2008中被擴展成全部定長的數據類型,比如integer,char和float 數據類型。數據壓縮通過減少I/O和提高緩沖區命中率來降低儲存成本和提高查詢性能。
SQL Server 2008在表級別和索引級別上支持行和頁的壓縮。以下是兩種類型的SQL Server 2008數據壓縮的不同之處。
行壓縮(ROW Compression) 這種壓縮功能考慮到變長數據類型結構來定義一欄。比如,以變長存儲的一個CHAR(100)欄只能使用由數據定義的存儲空間大小。在欄中存儲“SQL Server 2008”只要求存儲15個字符而不是完整的100個字符,因此,在存儲空間上節省率為85%。
這是在SQL Server 2005 Service Pack 2中可以使用的 vardecimal存儲格式的擴展。還要注意到,這個壓縮功能沒有因為零或者空值而占用磁盤空間。
頁級別壓縮(PAGE Compression) 這種壓縮功能是行壓縮的父集,它考慮到給定的頁內的一行或多行冗余數據。它也使用前綴和字典壓縮。這僅僅意味著對于兩種頁壓縮技術,存儲引擎在頁內減少重復數據。
比如,如果利用一列前綴把一張表分區,在一個具體分區中的所有數據都會有一樣或者相似的前綴。讓我們以一些像A1000Q-xxxx的產品代碼為開始說一些欄的值,存儲引擎存儲A1000Q – 一開始在頁上接著在相同的頁面上從這個值的其他所有的發生的事指到這個值。這也可以說成有已經定義好的默認約束的一欄。頁壓縮只發生在頁已經完全優化性能的時候。
雖然表面看來數據壓縮會縮小你的表和索引,但是最好首先通過
sp_estimate_data_compression_savings系統存儲程序或數據壓縮Wizard工具在表或索引中評估預計的節省空間。你也可能檢查現有數據是否成為碎片,因為你可能可以通過重建它而不是使用壓縮來縮小索引。
評估存儲節省空間
我們可以使用sp_estimate_data_compression_savings系統存儲程序或者SQL Server 2008數據壓縮Wizard工具去為索引中的一張表找出預計的存儲節省空間。為了使用AdventureWorks數據庫中的
sp_estimate_data_compression_savings系統存儲程序,
- USE AdventureWorks
- GO
- EXEC sp_estimate_data_compression_savings 'Sales', 'SalesOrderDetail', NULL, NULL, 'ROW' ;
- GO
在這里,
l 第一個參數是模式名,
l 第二個參數是對象名,
l 第三個參數是索引id,
l 第四參數是分區id,
l 最后一個參數是壓縮類型。
在以上的例子中,我會考慮在AdventureWorks數據庫中的Sales.SalesOrderDetail表上的行壓縮。執行這個查詢會給你如下顯示的結果:
請注意欄size_with_current_compression_setting(KB)和
size_with_requested_compression_setting (KB),假設沒有碎片,這兩個欄會讓你對在Sales.SalesOrderDetail表中實現節省空間有個估計。
要使用數據壓縮Wizard工具,右鍵單擊Sales.SalesOrderDetail表,選擇存儲并且單擊管理壓縮?!?/p>
這將在Welcome to Data Compression Wizard上啟動SQL Server 2008數據壓縮Wizard工具,點擊下一步。
在選擇壓縮類型頁面上,在壓縮類型欄里點擊下拉菜單,選擇你的壓縮類型選項。我將選擇行,因為這是通過sp_estimate_data_compression_savings系統存儲程序使用的選項。點擊計算按扭來顯示由存儲程序提供的相似信息。
這兩種方法將會讓你獲得通過壓縮你的表和索引來獲得存儲節省空間的一個估計。
使壓縮在表上可用
為了使壓縮在現有的非分區表上可用,可以使用有REBUILD選項的ALTER TABLE命令。
- ALTER TABLE Sales.SalesOrderDetail
- REBUILD WITH (DATA_COMPRESSION = ROW);
上面的語句使行壓縮在Sales.SalesOrderDetail表上可用。你也可以繼續用數據壓縮Wizard去使壓縮在表上可用。在點擊選擇壓縮類型頁面上的計算按扭之后,點擊下一步。在選擇一個輸出選項的頁面上,你可以選擇要么創建一個用于評論的腳本要么保存到一個文件中,立即運行或把它當作一個工作。
作為一個數據庫管理員,你可能會把這個當作你的數據庫日常維護的一部分,所以你可能也會為評論它而創建一個腳本,然后包括一個數據庫維護工作。點擊下一步按扭來繼續。
在點擊完成之前,審查SQL Server 2008數據壓縮摘要頁面。
你可能想要創建一個腳本,這個腳本通過使用sp_estimate_data_compression_savings系統存儲程序來遍歷所有的表,以此來產生摘要報告,而系統存儲程序將會幫助你分析你會壓縮哪些表或者索引。
【編輯推薦】