web-dev-qa-db-ja.com

パーティションテーブルのクラスター化インデックスの再構築

126のパーティションがあり、テーブルサイズが約270 GBであるパー​​ティションテーブルのクラスター化インデックスを再構築する方法を知る必要があります。

また、本番環境で実行したいので、最速の方法と方法を教えてください。

これは非常に重要な変更であり、実行する必要があるため、ヘルプや提案は高く評価されます。

1
Karan Salvi

パーティションは個別に再構築できます。これにより、再構築を中断して、すでに実行された作業を保持できます。以前に完了したパーティション番号の後で、再構築を再開できます。以下はこの手法の例で、@ PartitonNumber値は再起動シナリオで変更できます。

DECLARE
      @PartitionNumber int = 1 --specify start partition number
    , @EndPartitionNumber int;

--get last partition number
SELECT @EndPartitionNumber = MAX(p.partition_number)
FROM sys.indexes AS i
JOIN sys.partitions AS p ON
    p.object_id = i.object_id
    AND p.index_id = i.index_id
WHERE
    i.object_id = OBJECT_ID(N'dbo.YourTable', 'U')
    AND i.name = N'YourIndexName'; 

--rebuild each partition individually    
WHILE @PartitionNumber <= @EndPartitionNumber
BEGIN

    RAISERROR('Rebuilding partition %d', 0, 0, @PartitionNumber) WITH NOWAIT;

    ALTER INDEX [YourIndexName]
        ON [dbo].[YourTable]
        REBUILD Partition = @PartitionNumber;
        --WITH(ONLINE=ON); --specify desired online mode in SQL 2014 and later

    RAISERROR('Partition %d rebuild completed', 0, 0, @PartitionNumber) WITH NOWAIT;

    SET @PartitionNumber += 1;

END;
GO
4
Dan Guzman