[SQL]SQL Server 2016 Standard 支援資料壓縮功能

原本 Enterprise 版本所支援的功能,現在已經下放到 Standard 版本

SQL Server 從 2008 版本開始,就已經有支援資料壓縮的功能。使用者可以透過這個功能,針對大型的資料表進行設定,採用 Page 或 Row 的壓縮模式,讓資料儲存的時候可以占用較小的儲存空間,相對來說當需要進行 I/O 處理的時候,也因為可以減少不少的磁碟上 I/O 的存取,大幅提供資料庫的效能。

雖然這樣的功能很不錯,但對於一般使用 Standard 版本的大部分使用者來說,由於這個功能只存在 Enterprise 的版本之後,就只能有著看得到但吃不到的感覺。這幾天再使用 SQL Server 2017 的時候,才發現現在 Standard 版本就已經有提供這樣的功能,後來追查看一下 Microsoft DOC 的文件才發現,原來 SQL Server 2016 SP1 的版本就有提供了

因此我做了一個小的實驗,先建立一個簡單的資料表,接著透過下面的指令,在 SQL Server 2016  RTM 版本中,會顯示在目前的版本不提供這樣的功能

PRINT @@VERSION
GO
DECLARE @Schema varchar(10) = 'dbo'
DECLARE @Table varchar(20) = 'BigTable'
exec sys.sp_estimate_data_compression_savings  
    @Schema,@Table,NULL,NULL,ROW;
exec sys.sp_estimate_data_compression_savings 
    @Schema,@Table,NULL,NULL,PAGE;
GO

但是當我升級到 SP1 的版本之後,在重複同樣的指令,我就可以看到以下的訊息,可以正確預估出壓縮後的大小

雖然在 SQL Server 2016 Standard SP1 就有,但是 SSMS 要記得更新才能透過 Wizard 的方式,來管理資料壓縮。

像我這個範例資料表,採用 Page 壓縮就可以從 5G  降到 730MB,雖然會增加一點 CPU 的使用量,但這樣讀取的速度就會提升不少了,應該算是蠻划算的。

因此如果您有機會使用到 SQL Server 2016,那就不要忘記升級到 SP1,而從 2017 的版本開始,在 Standard 版本就直接支援了,因此如果還在為 I/O 煩惱的朋友,是可以嘗試看看囉。


PS

[2019/11/04] : 文章 PO 出之後,收到一些回饋,也有一些大神給了一些建議。雖然在 SQL Server Standard 的版本中有提供支援 Data Compression 的功能,但不代表這個跟 Enterprise 版本的就完全相同,在官方的說明文件中有特別強調這一點,目前在文件上是說 Standard 版本是被  Common Programmability Surface Area 來限制這一個部分的功能,所以在效能上會有所落差。目前測試上來看,SQL Server Standard 版本在做 Data Compression 的時候,就沒有辦法像 Enterprise 版本使用多核心來做,這一點在使用上要注意一下。

下面這段是取自 https://blog.pythian.com/microsofts-latest-announcement-gives-reasons-upgrade-sql-server-2016/ ,大家也可以參考一下這個說明

[2019/11/05] : 未來 SQL Server 上會越來越多利用 CPSA ( Common Programmability Surface Area ) 的方式,讓企業版的功能可以在標準版中進行測試或驗證,如果想要更多了解 SQL Server 2016 這個部分所增加或提供的功能,可以參考以下這兩份文件:

1. https://www.carehart.org/presentations/sswug%20-%20sql%20server%202016%20sp1%20changes%20the%20game.pdf

2. https://www.pass.org/DownloadFile.aspx?File=5755c4ab