Here is a script that retrieves table partition information
SELECT pf.name as PartitionFunction, ds.name AS PartitionScheme, p.partition_number AS PartitionNumber, CASE pf.boundary_value_on_right WHEN 1 THEN 'RIGHT' ELSE 'LEFT' END AS PartitionFunctionRange, CONVERT(BIGINT, prv_left.value) AS LowerBoundaryValue, CONVERT(BIGINT, prv_right.value) AS UpperBoundaryValue, fg.name AS FileGroupName, p.[row_count] as TotalRows, CONVERT(DECIMAL(12,2), p.reserved_page_count*8/1024.0) as ReservedSpaceMB, CONVERT(DECIMAL(12,2), p.used_page_count*8/1024.0) as UsedSpaceMB FROM sys.dm_db_partition_stats AS p (NOLOCK) INNER JOIN sys.indexes AS i (NOLOCK) ON i.[object_id] = p.[object_id] AND i.index_id = p.index_id INNER JOIN sys.data_spaces AS ds (NOLOCK) ON ds.data_space_id = i.data_space_id INNER JOIN sys.partition_schemes AS ps (NOLOCK) ON ps.data_space_id = ds.data_space_id INNER JOIN sys.partition_functions AS pf (NOLOCK) ON pf.function_id = ps.function_id INNER JOIN sys.destination_data_spaces AS dds2 (NOLOCK) ON dds2.partition_scheme_id = ps.data_space_id AND dds2.destination_id = p.partition_number INNER JOIN sys.filegroups AS fg (NOLOCK) ON fg.data_space_id = dds2.data_space_id LEFT OUTER JOIN sys.partition_range_values AS prv_left (NOLOCK) ON ps.function_id = prv_left.function_id AND prv_left.boundary_id = p.partition_number - 1 LEFT OUTER JOIN sys.partition_range_values AS prv_right (NOLOCK) ON ps.function_id = prv_right.function_id AND prv_right.boundary_id = p.partition_number WHERE OBJECTPROPERTY(p.[object_id], 'IsMSShipped') = 0 AND -- OBJECT_NAME(p.[object_id]) = 'partitioned_table' AND p.index_id=1 ORDER BY p.partition_number;
Cheers!
Leave a Reply