SQL Serverでは、sys.partition_range_values
を使用できます。 パーティション化されたテーブルに使用される境界値を見つけるためのシステムカタログビュー。
ただし、function_id
を知っている必要があります そのビューを使用する前に、パーティション関数の
ただし、いつものように、他の多数のテーブルに対して結合を実行して、必要な情報を取得できます。
sys.partition_range_values
まず、sys.partition_range_values
の列を見てみましょう。 ビューが戻ります。
SELECT * FROM sys.partition_range_values;
結果:
+---------------+---------------+----------------+---------+ | function_id | boundary_id | parameter_id | value | |---------------+---------------+----------------+---------| | 65542 | 1 | 1 | -1 | | 65542 | 2 | 1 | 100 | | 65542 | 3 | 1 | 10000 | +---------------+---------------+----------------+---------+
幸いなことに、このデータベースにはパーティション化されたテーブルが1つしかないため、結果に煩わされることはありません。
前述のように、このビューはfunction_id
を返します 、それを使用して他のテーブルの束を結合し、特定のテーブルのデータを返すことができます。
私の場合、パーティション化されたテーブルが1つしかないため、これは不要ですが、パーティション化されたヒープとインデックスが大量にあり、それを絞り込みたいと仮定します。
テーブルに絞り込みます
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;
結果:
+--------------------+---------------+------------------+ | partition_number | boundary_id | Boundary Value | |--------------------+---------------+------------------| | 1 | 1 | -1 | | 2 | 2 | 100 | | 3 | 3 | 10000 | | 4 | NULL | NULL | +--------------------+---------------+------------------+
ここでも同じですが、選択リストを拡張して、インデックス名、パーティション関数の名前などの他の情報を含めます。
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;
結果:
+---------+------------------------------+--------------------+-------------------------+---------------+------------------+ | 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 | +---------+------------------------------+--------------------+-------------------------+---------------+------------------+
垂直出力を使用した結果は次のとおりです(横にスクロールする必要はありません):
-[ 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