当您不知道受影响的表时处理分区

时间:2012-10-22 23:07:46

标签: sql-server sql-server-2008

我有一个小问题:(我有一个数据库,一个partition_schema达到了1000个分区,在互联网上看一看我发现它是顶级但它可以增加到15000.我无法增加它到15000,我能做的解决方案是合并一些分区。

我自20100101以来有一个分区,实际上有999,它不能再增加,所以我想从一个月合并分区,但在此之前我想要备份正在进行的信息受影响,但我不知道哪些表受到具有999范围的函数的影响。

Q值。如何找出该功能影响的表格?或者哪种方法可以合并分区我不会丢失数据?

1 个答案:

答案 0 :(得分:2)

您不应该丢失合并分区的数据。尽管如此,创建一个备份。

这是一个查询,可以让您深入了解哪些表正在使用分区函数:

DECLARE @PartitionFunction sysname = 'YourPartitionFunctionName';

SELECT t.name TableName
     , pf.name PartitionFunction
     , ps.name PartitionScheme
     , pst.partition_number
     , pst.used_page_count
     , row_count
from sys.dm_db_partition_stats pst
JOIN sys.partitions p ON pst.partition_id = p.partition_id
JOIN    sys.tables t
        ON p.object_id = t.object_id
JOIN    sys.indexes i
        ON p.object_id = i.object_id
        AND p.index_id = i.index_id
JOIN    sys.allocation_units au
        ON p.hobt_id = au.container_id
JOIN    sys.filegroups f
        ON au.data_space_id = f.data_space_id
JOIN    sys.partition_schemes ps
        ON ps.data_space_id = i.data_space_id
JOIN    sys.partition_functions pf
        ON ps.function_id = pf.function_id
WHERE used_page_count > 0 
  AND pf.name = @PartitionFunction 
  AND pst.index_id IN (0,1)/*Remove Nonclustered index counts*/;

您还可以参考我的答案here获取我经常用于监控分区容量的表值函数。