KB4528067 - 修正: SQL Server でパーティション切り替え後にパーティション分割された列ストア テーブルに対してsys.dm_db_index_physical_statsクエリを実行すると、IAM ページでエラー 8959 が発生する場合がある

適用先
SQL Server 2016 Service Pack 2 SQL Server 2016 Developer - duplicate (do not use) SQL Server 2016 Enterprise - duplicate (do not use) SQL Server 2016 Enterprise Core - duplicate (do not use) SQL Server 2016 Standard - duplicate (do not use) SQL Server 2017 on Windows SQL Server 2019 on Windows

現象

Microsoft SQL Server にクラスター化列ストア インデックス (CCI) を持つパーティション テーブルがあるとします。 テーブルに対して動的管理ビュー (DMV) で SELECT ステートメントを実行するとsys.dm_db_index_physical_stats パーティション切り替え後にインデックス割り当てマップ (IAM) ページに次のようなエラー メッセージが表示される場合があります。

エラー メッセージ 8959、レベル 16、状態 1、行 LineNumber

* テーブル エラー: オブジェクト ID ObjectID、インデックス ID IndexID、パーティション ID PartitionID、割り当てユニット ID UnitID (行内データ) の IAM ページ (1:361) は、オブジェクト ID ObjectID、インデックス ID IndexID、パーティション ID PartitionID、割り当てユニット ID UnitID(行内データ) の IAM チェーンにページ (0:0) ごとにリンクされています。

状態

Microsoft は、これが "適用対象" セクションに記載されている Microsoft 製品の問題であることを確認しました。

解決策

この問題は、SQL Server 用の次の累積的な更新プログラムで修正されています。

SQL Server の累積的な更新プログラムについて:

SQL Server 用の新しい累積的な更新プログラムには、以前の累積的な更新プログラムに含まれていたすべての修正プログラムおよびセキュリティ更新プログラムが含まれます。 SQL Server の最新の累積的な更新プログラムを確認してください。

詳細情報

問題の原因は、列ストア テーブルのパーティション切り替えを実行したときに、ソース パーティションに廃棄 (Tombstone) デルタストアが存在する場合に、この廃棄 (Tombstone) がターゲット パーティションに切り替わらず、IAM ページの不一致エラーが発生することです。 "sys.dm_db_column_store_row_group_physical_stats" を実行すると、列ストア インデックスに関する詳細な行グループの状態 (廃棄を含む) を確認できます。

回避策

この問題は、バックグラウンドの Tuple Mover が廃棄デルタストアを破棄すると、しばらくすると解消されます。

または、この問題を回避するには、"ALTER INDEX ...REORGANIZE" を 1 回以上表示します。

参考資料

マイクロソフトでソフトウェア更新プログラムの説明に使用する用語集を参照してください。