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

Membagi Partisi menjadi Dua di SQL Server (T-SQL)

Jika Anda memiliki tabel atau indeks yang dipartisi di SQL Server, tetapi Anda membutuhkan lebih banyak partisi, Anda dapat menambahkan partisi ke fungsi partisi menggunakan ALTER PARTITION FUNCTION pernyataan dengan SPLIT RANGE argumen.

Ketika Anda melakukan ini, Anda membagi partisi yang ada menjadi dua.

Contoh

Berikut ini contoh untuk didemonstrasikan. Pertama, mari kita lihat penyiapan kita saat ini.

Penyiapan Saat Ini

Kami sudah memiliki empat partisi, dan kami ingin menambahkan yang kelima.

Jadi kita telah membuat fungsi partisi seperti ini:

CREATE PARTITION FUNCTION MoviesPartitionFunction (int)  
    AS RANGE LEFT FOR VALUES (-1, 100, 10000);

Kode ini menghasilkan partisi yang menyimpan nilai sebagai berikut.

Partisi Nilai
1 <=–1
2 > –1 DAN <=100
3 > 100 DAN ==10000
4 > 10000

Untuk contoh ini, kami akan menambahkan nilai batas baru 500.

Jadi kami ingin terlihat seperti ini:

Partisi Nilai
1 <=–1
2 > –1 DAN <=100
3 > 100 DAN ==500
4 > 500 DAN ==10000
5 > 10000

Juga, untuk tujuan contoh ini, bayangkan kita memiliki tabel yang dipartisi menggunakan fungsi partisi di atas, dan saat ini berisi lebih dari empat ribu baris data.

Mari kita lihat sekilas bagaimana baris didistribusikan di seluruh partisi kita:

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           |
+--------------------+-------------+

Jadi sekarang kita ingin menambahkan partisi baru dengan nilai batas 500.

Dalam hal ini, kita akan membagi partisi antara nilai batas 100 dan 10.000.

Saya harus menyebutkan bahwa Microsoft merekomendasikan untuk tidak membagi partisi yang terisi. Jadi itu sesuatu yang perlu diingat.

Namun, untuk tujuan contoh ini, kami akan membagi partisi yang berisi data.

Pisahkan Partisi

Di sinilah kita melanjutkan dan membagi partisi.

Kami menggunakan ALTER PARTITION FUNCTION pernyataan untuk membagi partisi.

Namun, memisahkan partisi akan membuat dua partisi menjadi satu, jadi kita perlu memastikan ada filegroup untuk partisi baru. Kita juga perlu memastikan bahwa skema partisi kita mengetahui filegroup mana yang akan digunakan ketika kita membagi partisi.

Anda dapat menggunakan grup file yang ada, atau Anda dapat membuat yang baru.

Mari kita buat yang baru.

Berikut kode yang dapat kita gunakan untuk melakukan semua hal di atas:

ALTER DATABASE Test ADD FILEGROUP MoviesFg5;

ALTER DATABASE Test   
ADD FILE   
(  
    NAME = MoviesFg5dat,  
    FILENAME = '/var/opt/mssql/data/MoviesFg5dat.ndf',  
    SIZE = 5MB,  
    MAXSIZE = 100MB,  
    FILEGROWTH = 5MB  
)  
TO FILEGROUP MoviesFg5;

ALTER PARTITION SCHEME MoviesPartitionScheme  
NEXT USED MoviesFg5;

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

Hasil:

Commands completed successfully.

Kami telah berhasil membagi partisi.

Verifikasi Pemisahan

Sekarang kita dapat memverifikasi bahwa fungsi partisi telah dimodifikasi untuk mencerminkan nilai batas yang baru.

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   |
+---------------+---------+

Jadi kita dapat melihat bahwa nilai batas baru telah berhasil ditambahkan.

Dan inilah cara data sekarang didistribusikan ke 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           |
+--------------------+-------------+

Jadi kita sekarang memiliki 5 partisi.

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.

Memisahkan Partisi yang Mengandung Data

Seperti yang disebutkan, Microsoft merekomendasikan untuk tidak memisahkan 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. Buat Fungsi Bernilai Tabel di SQL Server

  2. Bagaimana cara menambahkan Batasan Default ke Kolom yang ada di Tabel SQL Server - Tutorial SQL Server / TSQL Bagian 91

  3. Sql Server memicu memasukkan nilai dari baris baru ke tabel lain

  4. Dapatkan waktu datetime menggunakan T-SQL?

  5. Fungsi Matematika SQL Server (Daftar Lengkap)