Khi bạn nén một bảng được phân vùng trong SQL Server, bạn có thể nén tất cả các phân vùng, một số hoặc chỉ một phân vùng.
Để thực hiện việc này, hãy sử dụng REBUILD PARTITION
cú pháp trong ALTER TABLE
tuyên bố.
Khi thực hiện việc này, bạn có thể chỉ xây dựng lại phân vùng được chỉ định hoặc tất cả các phân vùng. Ngoài ra, bạn có thể xây dựng lại tất cả các phân vùng, trong khi chỉ nén một phân vùng cụ thể hoặc danh sách các phân vùng.
Ví dụ 1 - Tạo lại một phân vùng
Trong ví dụ đầu tiên này, chúng tôi xây dựng lại và nén chỉ một phân vùng trong bảng.
Ước tính tiết kiệm nén
Hãy tưởng tượng chúng ta muốn nén một phân vùng duy nhất trong một bảng có tên là Movies
.
Đầu tiên, chúng ta có thể sử dụng sp_estimate_data_compression_savings
hệ thống lưu trữ quy trình để ước tính khoản tiết kiệm mà chúng tôi sẽ nhận được từ việc nén bảng.
EXEC sp_estimate_data_compression_savings
@schema_name = 'dbo',
@object_name = 'Movies',
@index_id = NULL,
@partition_number = 3,
@data_compression = 'ROW';
Kết quả (sử dụng đầu ra dọc):
object_name | Movies schema_name | dbo index_id | 1 partition_number | 3 size_with_current_compression_setting(KB) | 120 size_with_requested_compression_setting(KB) | 88 sample_size_with_current_compression_setting(KB) | 128 sample_size_with_requested_compression_setting(KB) | 96
Theo sp_estimate_data_compression_savings
, kích thước phân vùng sẽ giảm từ 120 KB xuống 88 KB sau khi chúng tôi nén nó.
Nén phân vùng
Hãy tiếp tục và nén nó.
ALTER TABLE Movies
REBUILD PARTITION = 3 WITH (DATA_COMPRESSION = ROW);
Trong trường hợp này, tôi đã sử dụng nén hàng.
Xác minh Tiết kiệm Nén
Bây giờ, nếu chúng ta truy vấn sp_estimate_data_compression_savings
một lần nữa, chúng ta sẽ thấy rằng kích thước hiện tại chính xác như đã được ước tính trước đây (88 KB).
EXEC sp_estimate_data_compression_savings
@schema_name = 'dbo',
@object_name = 'Movies',
@index_id = NULL,
@partition_number = 3,
@data_compression = 'NONE';
Kết quả (sử dụng đầu ra dọc):
object_name | Movies schema_name | dbo index_id | 1 partition_number | 3 size_with_current_compression_setting(KB) | 88 size_with_requested_compression_setting(KB) | 112 sample_size_with_current_compression_setting(KB) | 96 sample_size_with_requested_compression_setting(KB) | 128
Trong ví dụ này, tôi nhận được ước tính về yêu cầu dung lượng nếu tôi muốn xóa nén (tức là đặt nó thành NONE
).
Xác minh Phân vùng nào sử dụng Nén
Chúng tôi cũng có thể sử dụng sys.partitions
xem để xác minh rằng phân vùng có nén.
SELECT
[partition_number],
[data_compression],
[data_compression_desc]
FROM sys.partitions
WHERE object_id = OBJECT_ID('Movies');
Kết quả:
+--------------------+--------------------+-------------------------+ | partition_number | data_compression | data_compression_desc | |--------------------+--------------------+-------------------------| | 1 | 0 | NONE | | 2 | 0 | NONE | | 4 | 0 | NONE | | 3 | 1 | ROW | +--------------------+--------------------+-------------------------+
Xóa nén
Trước khi chúng ta chuyển sang ví dụ 2, hãy xóa phần nén khỏi phân vùng.
ALTER TABLE Movies
REBUILD PARTITION = 3 WITH (DATA_COMPRESSION = NONE);
Ví dụ 2 - Nén Nhiều Phân vùng
Trong ví dụ này, chúng ta xây dựng lại tất cả các phân vùng, nhưng chỉ chỉ định các phân vùng mà chúng ta muốn nén.
Đây là một phương pháp thay thế cho ví dụ đầu tiên của chúng tôi. Sử dụng cú pháp này, chúng tôi có thể chỉ định danh sách các phân vùng để nén.
ALTER TABLE Movies
REBUILD PARTITION = ALL
WITH (DATA_COMPRESSION = ROW ON PARTITIONS(2,3));
Trong trường hợp này, tôi đã xây dựng lại tất cả các phân vùng, nhưng tôi chỉ nén các phân vùng 2 và 3.
Một lần nữa, chúng ta có thể sử dụng sys.partitions
để xác minh rằng chúng đã được nén.
SELECT
[partition_number],
[data_compression],
[data_compression_desc]
FROM sys.partitions
WHERE object_id = OBJECT_ID('Movies');
Kết quả:
+--------------------+--------------------+-------------------------+ | partition_number | data_compression | data_compression_desc | |--------------------+--------------------+-------------------------| | 1 | 0 | NONE | | 2 | 1 | ROW | | 3 | 1 | ROW | | 4 | 0 | NONE | +--------------------+--------------------+-------------------------+