Di SQL Server, Anda dapat menggunakan sys.partition_range_values
tampilan katalog sistem untuk mengetahui nilai batas yang digunakan untuk tabel yang dipartisi.
Namun, Anda perlu mengetahui function_id
fungsi partisi sebelum Anda menggunakan tampilan itu.
Namun seperti biasa, Anda dapat menjalankan gabungan terhadap sekumpulan tabel lain untuk mendapatkan info yang diinginkan.
sys.partition_range_values
Pertama, mari kita lihat kolom apa sys.partition_range_values
lihat pengembalian.
SELECT * FROM sys.partition_range_values;
Hasil:
+---------------+---------------+----------------+---------+ | function_id | boundary_id | parameter_id | value | |---------------+---------------+----------------+---------| | 65542 | 1 | 1 | -1 | | 65542 | 2 | 1 | 100 | | 65542 | 3 | 1 | 10000 | +---------------+---------------+----------------+---------+
Untungnya bagi saya, saya hanya punya satu tabel yang dipartisi di database ini, jadi saya tidak dibombardir dengan hasil.
Seperti disebutkan, tampilan ini mengembalikan function_id
, jadi kita bisa menggunakannya untuk menggabungkan sekumpulan tabel lain, sehingga kita bisa mengembalikan data untuk tabel tertentu.
Dalam kasus saya ini berlebihan, mengingat hanya ada satu tabel yang dipartisi, tetapi mari kita asumsikan Anda memiliki banyak tumpukan dan indeks yang dipartisi, dan Anda hanya ingin mempersempitnya.
Persempit ke Tabel
Berikut adalah contoh mengembalikan rentang batas untuk tabel tertentu yang disebut Movies
.
SELECT
p.partition_number,
r.boundary_id,
r.value AS [Boundary Value]
FROM sys.tables AS t
JOIN sys.indexes AS i
ON t.object_id = i.object_id
JOIN sys.partitions AS p
ON i.object_id = p.object_id AND i.index_id = p.index_id
JOIN sys.partition_schemes AS s
ON i.data_space_id = s.data_space_id
JOIN sys.partition_functions AS f
ON s.function_id = f.function_id
LEFT JOIN sys.partition_range_values AS r
ON f.function_id = r.function_id and r.boundary_id = p.partition_number
WHERE i.type <= 1 AND t.name = 'Movies'
ORDER BY p.partition_number ASC;
Hasil:
+--------------------+---------------+------------------+ | partition_number | boundary_id | Boundary Value | |--------------------+---------------+------------------| | 1 | 1 | -1 | | 2 | 2 | 100 | | 3 | 3 | 10000 | | 4 | NULL | NULL | +--------------------+---------------+------------------+
Ini dia lagi, tapi kami memperluas daftar pilih untuk memasukkan info lain, seperti nama indeks, nama fungsi partisi, dll.
SELECT
t.name AS [Table],
i.name AS [Index],
p.partition_number,
f.name,
r.boundary_id,
r.value AS [Boundary Value]
FROM sys.tables AS t
JOIN sys.indexes AS i
ON t.object_id = i.object_id
JOIN sys.partitions AS p
ON i.object_id = p.object_id AND i.index_id = p.index_id
JOIN sys.partition_schemes AS s
ON i.data_space_id = s.data_space_id
JOIN sys.partition_functions AS f
ON s.function_id = f.function_id
LEFT JOIN sys.partition_range_values AS r
ON f.function_id = r.function_id and r.boundary_id = p.partition_number
WHERE i.type <= 1 AND t.name = 'Movies'
ORDER BY p.partition_number ASC;
Hasil:
+---------+------------------------------+--------------------+-------------------------+---------------+------------------+ | Table | Index | partition_number | name | boundary_id | Boundary Value | |---------+------------------------------+--------------------+-------------------------+---------------+------------------| | Movies | PK__Movies__4BD2941AD44D2FCF | 1 | MoviesPartitionFunction | 1 | -1 | | Movies | PK__Movies__4BD2941AD44D2FCF | 2 | MoviesPartitionFunction | 2 | 100 | | Movies | PK__Movies__4BD2941AD44D2FCF | 3 | MoviesPartitionFunction | 3 | 10000 | | Movies | PK__Movies__4BD2941AD44D2FCF | 4 | MoviesPartitionFunction | NULL | NULL | +---------+------------------------------+--------------------+-------------------------+---------------+------------------+
Ini hasilnya lagi menggunakan output vertikal (jadi Anda tidak perlu menggulir ke samping):
-[ RECORD 1 ]------------------------- Table | Movies Index | PK__Movies__4BD2941AD44D2FCF partition_number | 1 name | MoviesPartitionFunction boundary_id | 1 Boundary Value | -1 -[ RECORD 2 ]------------------------- Table | Movies Index | PK__Movies__4BD2941AD44D2FCF partition_number | 2 name | MoviesPartitionFunction boundary_id | 2 Boundary Value | 100 -[ RECORD 3 ]------------------------- Table | Movies Index | PK__Movies__4BD2941AD44D2FCF partition_number | 3 name | MoviesPartitionFunction boundary_id | 3 Boundary Value | 10000 -[ RECORD 4 ]------------------------- Table | Movies Index | PK__Movies__4BD2941AD44D2FCF partition_number | 4 name | MoviesPartitionFunction boundary_id | NULL Boundary Value | NULL