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

Gabungkan Dua Partisi Menjadi Satu di SQL Server (T-SQL)

Di SQL Server, Anda dapat menggunakan ALTER PARTITION FUNCTION untuk menggabungkan dua partisi menjadi satu partisi.

Untuk melakukannya, gunakan MERGE RANGE argumen, sambil memberikan nilai batas partisi untuk dijatuhkan.

Operasi ini menghapus partisi dan menggabungkan nilai apa pun yang ada di partisi ke dalam partisi yang tersisa.

Contoh

Bayangkan kita memiliki lima partisi yang ingin kita jadikan empat.

Partisi Saat Ini

Kami memiliki fungsi partisi yang disebut MoviesPartitionFunction dengan empat nilai batas.

SELECT 
    prv.boundary_id,
    prv.[value]
FROM sys.partition_range_values prv
INNER JOIN sys.partition_functions pf
ON prv.function_id = pf.function_id
WHERE pf.name = 'MoviesPartitionFunction';

Hasil:

+---------------+---------+
| boundary_id   | value   |
|---------------+---------|
| 1             | -1      |
| 2             | 100     |
| 3             | 500     |
| 4             | 10000   |
+---------------+---------+

Ini berarti ada lima partisi.

Untuk contoh ini, kami akan menghapus rentang batas 500.

Juga, bayangkan kita sudah memiliki tabel dengan data yang didistribusikan di beberapa partisi ini.

Inilah cara baris saat ini didistribusikan di seluruh partisi.

SELECT 
    partition_number,
    row_count
FROM sys.dm_db_partition_stats
WHERE object_id = OBJECT_ID('dbo.Movies');

Hasil:

+--------------------+-------------+
| partition_number   | row_count   |
|--------------------+-------------|
| 1                  | 0           |
| 2                  | 100         |
| 3                  | 400         |
| 4                  | 3579        |
| 5                  | 0           |
+--------------------+-------------+

Saya harus menunjukkan bahwa Microsoft sebenarnya menyarankan untuk tidak menggabungkan (atau memisahkan) partisi yang berisi data. Namun, untuk tujuan contoh ini, kami akan berhati-hati dan menggabungkan dua partisi yang berisi data.

Gabungkan Partisi

Oke, mari kita gabungkan partisi.

ALTER PARTITION FUNCTION MoviesPartitionFunction()  
MERGE RANGE (500);

Hasil:

Commands completed successfully.

Kami berhasil menggabungkan partisi.

Periksa Hasilnya

Mari kita periksa hasilnya.

SELECT 
    prv.boundary_id,
    prv.[value]
FROM sys.partition_range_values prv
INNER JOIN sys.partition_functions pf
ON prv.function_id = pf.function_id
WHERE pf.name = 'MoviesPartitionFunction';

Hasil:

+---------------+---------+
| boundary_id   | value   |
|---------------+---------|
| 1             | -1      |
| 2             | 100     |
| 3             | 10000   |
+---------------+---------+

Seperti yang diharapkan, rentang batas 500 telah dijatuhkan, dan kita hanya memiliki tiga rentang batas.

Mari kita lihat bagaimana data didistribusikan di seluruh partisi.

SELECT 
    partition_number,
    row_count
FROM sys.dm_db_partition_stats
WHERE object_id = OBJECT_ID('dbo.Movies');

Hasil:

+--------------------+-------------+
| partition_number   | row_count   |
|--------------------+-------------|
| 1                  | 0           |
| 2                  | 100         |
| 3                  | 3979        |
| 4                  | 0           |
+--------------------+-------------+

Sekali lagi seperti yang diharapkan, data dari partisi 3 dan 4 telah bergabung menjadi satu partisi (partisi 3).

Mengapa Memiliki Partisi Kosong?

Jika Anda bertanya-tanya mengapa saya memiliki partisi kosong di setiap ujungnya, ini dilakukan secara khusus untuk memfasilitasi pemisahan dan penggabungan partisi.

Membiarkan partisi tetap kosong di setiap ujungnya mencegah pergerakan data tak terduga yang mungkin Anda dapatkan saat memisahkan atau menggabungkan partisi.

Praktik ini juga direkomendasikan oleh Microsoft, untuk alasan ini.

Menggabungkan Partisi yang Mengandung Data

Seperti yang disebutkan, Microsoft merekomendasikan untuk tidak menggabungkan partisi yang sudah berisi data.

Memisahkan atau menggabungkan partisi yang terisi bisa menjadi tidak efisien. Mereka bisa menjadi tidak efisien karena pemisahan atau penggabungan dapat menyebabkan pembuatan log sebanyak empat kali lebih banyak, dan juga dapat menyebabkan penguncian yang parah.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server TAMPILKAN TABEL Setara

  2. Gunakan FILEGROUP_ID() untuk Mengembalikan ID Filegroup di SQL Server

  3. Tambahkan Akun Email Database ke Profil (T-SQL)

  4. Menggunakan DBCC CLOENDATABASE untuk menghasilkan skema dan statistik hanya salinan database pengguna di SQL Server 2014 SP2

  5. Bagaimana SHOWPLAN_XML Bekerja di SQL Server