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.