Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Kompres Partisi Tertentu dalam Tabel di SQL Server (T-SQL)

Saat Anda mengompresi tabel yang dipartisi di SQL Server, Anda dapat mengompresi semua partisi, beberapa, atau hanya satu partisi.

Untuk melakukannya, gunakan REBUILD PARTITION sintaks dalam ALTER TABLE penyataan.

Saat melakukan ini, Anda dapat membangun kembali hanya partisi yang ditentukan atau semua partisi. Atau, Anda dapat membangun kembali semua partisi, sambil mengompresi hanya partisi atau daftar partisi tertentu.

Contoh 1 – Membangun Kembali Satu Partisi

Dalam contoh pertama ini, kami membangun kembali dan mengompres hanya satu partisi dalam tabel.

Perkirakan Penghematan Kompresi

Bayangkan kita ingin mengompresi satu partisi dalam tabel bernama Movies .

Pertama, kita bisa menggunakan sp_estimate_data_compression_savings prosedur tersimpan sistem untuk memperkirakan penghematan yang akan kita dapatkan dari mengompresi tabel.

EXEC sp_estimate_data_compression_savings 
    @schema_name = 'dbo', 
    @object_name = 'Movies', 
    @index_id = NULL, 
    @partition_number = 3, 
    @data_compression = 'ROW';

Hasil (menggunakan keluaran vertikal):

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

Menurut sp_estimate_data_compression_savings , ukuran partisi akan berkurang dari 120 KB menjadi 88 KB setelah kita mengompresnya.

Kompres Partisi

Ayo lanjutkan dan kompres.

ALTER TABLE Movies
REBUILD PARTITION = 3 WITH (DATA_COMPRESSION = ROW);

Dalam hal ini saya menggunakan kompresi baris.

Verifikasi Penghematan Kompresi

Sekarang, jika kita menanyakan sp_estimate_data_compression_savings lagi, kita akan melihat bahwa ukuran saat ini sekarang persis seperti yang diperkirakan sebelumnya (88 KB).

EXEC sp_estimate_data_compression_savings 
    @schema_name = 'dbo', 
    @object_name = 'Movies', 
    @index_id = NULL, 
    @partition_number = 3, 
    @data_compression = 'NONE';

Hasil (menggunakan keluaran vertikal):

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

Dalam contoh ini, saya mendapatkan perkiraan kebutuhan ruang jika saya menghapus kompresi (yaitu mengaturnya ke NONE ).

Verifikasi Partisi mana yang menggunakan Kompresi

Kita juga dapat menggunakan sys.partitions lihat untuk memverifikasi bahwa partisi memiliki kompresi.

SELECT
    [partition_number],
    [data_compression],
    [data_compression_desc]
FROM sys.partitions
WHERE object_id = OBJECT_ID('Movies');

Hasil:

+--------------------+--------------------+-------------------------+
| partition_number   | data_compression   | data_compression_desc   |
|--------------------+--------------------+-------------------------|
| 1                  | 0                  | NONE                    |
| 2                  | 0                  | NONE                    |
| 4                  | 0                  | NONE                    |
| 3                  | 1                  | ROW                     |
+--------------------+--------------------+-------------------------+

Hapus Kompresi

Sebelum kita melanjutkan ke contoh 2, mari kita hapus kompresi dari partisi.

ALTER TABLE Movies
REBUILD PARTITION = 3 WITH (DATA_COMPRESSION = NONE);

Contoh 2 – Kompres Beberapa Partisi

Dalam contoh ini, kami membangun kembali semua partisi, tetapi hanya menentukan partisi yang ingin kami kompres.

Ini adalah metode alternatif untuk contoh pertama kami. Dengan menggunakan sintaks ini, kita dapat menentukan daftar partisi yang akan dikompres.

ALTER TABLE Movies
REBUILD PARTITION = ALL
WITH (DATA_COMPRESSION = ROW ON PARTITIONS(2,3));

Dalam hal ini saya membangun kembali semua partisi, tetapi saya hanya mengkompresi partisi 2 dan 3.

Sekali lagi, kita dapat menggunakan sys.partitions untuk memverifikasi bahwa mereka telah dikompresi.

SELECT
    [partition_number],
    [data_compression],
    [data_compression_desc]
FROM sys.partitions
WHERE object_id = OBJECT_ID('Movies');

Hasil:

+--------------------+--------------------+-------------------------+
| partition_number   | data_compression   | data_compression_desc   |
|--------------------+--------------------+-------------------------|
| 1                  | 0                  | NONE                    |
| 2                  | 1                  | ROW                     |
| 3                  | 1                  | ROW                     |
| 4                  | 0                  | NONE                    |
+--------------------+--------------------+-------------------------+


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara mendapatkan tanggal pertama dan terakhir tahun ini?

  2. Jatuhkan kunci utama menggunakan skrip di database SQL Server

  3. 9 Tips Terbaik untuk Menyiapkan Cluster SQL Server Anda

  4. Sisipan massal lambat untuk tabel dengan banyak indeks

  5. Lewati tabel sebagai parameter ke sql server UDF