SQLServer:页压缩带来的空间节约之旅

1. 什么是页压缩

SQLServer在2008版本之后引入了页级压缩功能,旨在通过使用更少的存储空间存储数据,来减少存储成本。页级压缩可以对数据表中的每个单独页面进行压缩,可以使用多种压缩算法来压缩数据。

页压缩是一种将数据压缩为更小的存储单元的技术,它可以在不牺牲性能的情况下大幅减少数据库占用的存储空间。

页级压缩的优点主要包括:

减少存储空间

提高I/O性能(可读取更多的数据)

通过允许更多的数据在内存中加载,来提高内存使用率

2. 页压缩的种类

SQLServer提供了两种使用不同压缩算法进行数据压缩的页压缩类型:

2.1. Row Compression 行压缩

行压缩通过删除数据页面内不必要的空间来减少数据的存储空间。当行被压缩时,如果行的数据是可压缩的,SQLServer会将行的数据压缩到最小的存储空间。这些可压缩的数据类型通常包括整数、日期和GUID等等。

使用行压缩的时候,数据不需要被重建,在大多数情况下,只需使用存储过程并启用压缩即可。以下是一个使用行级压缩的示例:

ALTER TABLE [Table_Name]

REBUILD Partition = ALL

WITH (

DATA_COMPRESSION = ROW

);

2.2. Page Compression 页压缩

页压缩使用更强大的压缩算法来压缩行,并通过将行放入压缩的、较小的数据库页面中,从而获得更大的存储空间节约。页压缩是通过对整个页面应用压缩算法来实现的,这样可以将许多行打包到单个页面中。

使用页压缩的时候,需要通过ALTER TABLE语句对表进行压缩,并选择压缩算法。以下是一个使用页级压缩的示例:

ALTER TABLE [Table_Name]

REBUILD Partition = ALL

WITH (

DATA_COMPRESSION = PAGE

);

3. 页压缩的相关注意事项

3.1. 压缩对查询性能的影响

当表被压缩后,查询性能可能会受到影响。虽然SQLServer的压缩算法使查询变慢的可能性非常小,但是在某些情况下,压缩可以导致不同压缩算法之间出现一些性能差异。因此,压缩之后的查询性能应该被测试以确保任何重要的查询都没有特别影响。

3.2. 压缩的开销

压缩在查询性能方面的影响远不及数据库压缩开销的影响。虽然数据压缩可以节省磁盘存储空间,但同时也会增加CPU使用率。压缩开销的大小取决于所使用的算法的以及数据的压缩度等因素。

3.3. 压缩的选择

在对数据库进行压缩时,需要权衡压缩方案的开销、性能和存储节约。在某些情况下,通过在压缩数据后获得的存储节约可以弥补由于性能下降造成的损失。在其他情况下,使用压缩算法提供的存储节约可能不够大,或者可能使数据访问变慢。

3.4. 压缩的限制

SQLServer提供的页压缩功能有一些限制。例如,压缩仅适用于Enterprise版本及更高版本,而不适用于Express和Developer版本。此外,只有簇集索引和堆表可以进行压缩。

4. 页压缩的应用实例

假设我们有一个包含 sales_order 订单信息的表,以下是这个表的一个简单结构:

CREATE TABLE Sales_Order (

Sales_Order_Id INT PRIMARY KEY NOT NULL,

Customer_Id INT,

Order_Date DATETIME2 (0),

Sales_Amount MONEY,

Sales_Rep_Id INT);

在这个例子中,我们使用页压缩前与页压缩后的空间大小来比较压缩所节省的空间。以下是对该表进行页压缩的示例:

-- 压缩前

EXEC sp_spaceused 'Sales_Order';

-- 压缩

ALTER TABLE Sales_Order REBUILD

WITH (DATA_COMPRESSION = PAGE);

-- 压缩后

EXEC sp_spaceused 'Sales_Order';

以上代码演示了如何执行页级压缩和测试压缩后的空间节约。在执行上述代码之后,您可以查看每个操作返回的存储空间占用信息。如果压缩实例空间节约巨大,那么这种技术将对数据库管理员非常有益。

总结

页压缩是一项非常实用的技术,可以将数据存储于更少的存储空间中,以减少存储成本。它包括行压缩和页压缩两种类型,适用于大多数企业数据管理场景。需要注意的是,压缩会对查询性能产生影响,并且压缩开销的大小取决于算法和数据紧缩度。在使用压缩时,需要仔细权衡压缩开销、性能和存储节约,以确保最佳性能和空间节约。

数据库标签