Trong SQL Server, bạn có thể sử dụng sys.partition_range_values
chế độ xem danh mục hệ thống để tìm ra các giá trị ranh giới được sử dụng cho một bảng được phân vùng.
Tuy nhiên, bạn cần biết function_id
của chức năng phân vùng trước khi bạn sử dụng dạng xem đó.
Nhưng như mọi khi, bạn có thể chạy một phép nối với một loạt các bảng khác để có được thông tin mong muốn.
sys.partition_range_values
Đầu tiên, hãy xem sys.partition_range_values
có những cột nào xem lợi nhuận.
SELECT * FROM sys.partition_range_values;
Kết quả:
+---------------+---------------+----------------+---------+ | function_id | boundary_id | parameter_id | value | |---------------+---------------+----------------+---------| | 65542 | 1 | 1 | -1 | | 65542 | 2 | 1 | 100 | | 65542 | 3 | 1 | 10000 | +---------------+---------------+----------------+---------+
May mắn thay cho tôi, tôi chỉ có một bảng được phân vùng trong cơ sở dữ liệu này, vì vậy tôi không phải lo lắng về kết quả.
Như đã đề cập, dạng xem này trả về function_id
, vì vậy chúng tôi có thể sử dụng nó để nối một loạt các bảng khác, để chúng tôi có thể trả về dữ liệu cho một bảng cụ thể.
Trong trường hợp của tôi, điều này là thừa, vì chỉ có một bảng được phân vùng, nhưng giả sử bạn có rất nhiều chỉ mục và đống được phân vùng và bạn chỉ muốn thu hẹp nó.
Thu hẹp nó thành một bảng
Dưới đây là một ví dụ về việc trả lại các phạm vi ranh giới cho một bảng cụ thể có tên là 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;
Kết quả:
+--------------------+---------------+------------------+ | partition_number | boundary_id | Boundary Value | |--------------------+---------------+------------------| | 1 | 1 | -1 | | 2 | 2 | 100 | | 3 | 3 | 10000 | | 4 | NULL | NULL | +--------------------+---------------+------------------+
Đây là một lần nữa, nhưng chúng tôi mở rộng danh sách lựa chọn để bao gồm các thông tin khác, chẳng hạn như tên chỉ mục, tên của chức năng phân vùng, v.v.
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;
Kết quả:
+---------+------------------------------+--------------------+-------------------------+---------------+------------------+ | 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 | +---------+------------------------------+--------------------+-------------------------+---------------+------------------+
Đây là kết quả một lần nữa bằng cách sử dụng đầu ra dọc (vì vậy bạn không phải cuộn sang ngang):
-[ 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