read_onlyファイルグループの列ストアインデックスによりCheckDBが妨げられる


15

ファイルグループに列ストアインデックスが含まれている場合、データベース全体をread_only防止するようdbcc checkdbにファイルグループを設定しているようです。実行しようとするcheckdbcheckfilegroupのための任意の読み書きセカンダリとを含め、データベース内のファイルグループ[PRIMARY])、以下のエラーが返されます...

Msg 8921, Level 16, State 1, Line 24
Check terminated. A failure was detected while collecting facts. 
Possibly tempdb out of space or a system table is inconsistent. Check previous errors.

読み取り専用のファイルグループに列ストアデータを保持するためのサポートされている方法はありますか?または、このシナリオの整合性チェックから除外されますか?

再現

create database check_fg_ro
go
use check_fg_ro
go
exec sp_changedbowner 'sa';
go
alter database check_fg_ro add filegroup check_fg_ro_2;
alter database check_fg_ro
    add file (
         name='check_fg_ro_2'
        ,filename='C:\check_fg_ro_2.ndf'
    ) to filegroup check_fg_ro_2;
go
create table foo ( 
    i int not null primary key
) on check_fg_ro_2;
go
create columnstore index ccix_foo on foo(i);
go
use master
go
alter database check_fg_ro modify filegroup check_fg_ro_2 read_only;
go
dbcc checkdb( check_fg_ro ) with no_infomsgs, all_errormsgs, extended_logical_checks;
/*
Msg 8921, Level 16, State 1, Line 24
Check terminated. A failure was detected while collecting facts. 
Possibly tempdb out of space or a system table is inconsistent. Check previous errors.
*/
go

免責事項:technetフォーラムへのクロス投稿

回答:


12

この問題は、DBCCが読み取り専用の列ストアテーブルの削除されたビットマップを検証しようとしたときに発生します。

削除されたビットマップは、列ストアテーブルと同じファイルグループに保存されます。圧縮された行グループから論理的に削除された行を追跡します。

私の知る限り、すべてが内部システムテーブル(SQL Server 2017 CU3)で正しく構成されており、ほとんどのDBCCコードは、列ストアで削除されたビットマップを保持する非表示行セットを正しく説明しています。

何らかの理由で、オフラインまたは読み取り専用のファイルグループをチェックすると、未処理の例外が発生します。

呼び出し履歴

Msg 8921, Level 16, State 1, Line 69
Check terminated. A failure was detected while collecting facts.
Possibly tempdb out of space or a system table is inconsistent.
Check previous errors.

同じオフライン/読み取り専用チェックは、DBCC処理(ファクトの収集中)で問題なく数回実行されます。

問題は、(任意のファイルグループで)DBCC CHECKDBまたはDBCC FILEGROUP実行されたときに発生するかDBCC CHECKTABLE、特定の読み取り専用列ストアテーブルを確認するように求められます。これらのいずれも、残りのDBCCチェックの実行を妨げる致命的なエラー状態を生成しないため、これはバグに違いありません。


または、このシナリオの整合性チェックから除外されますか?

回避策として、DBCC CHECKFILEGROUP列ストアファイルグループを読み取り専用にする(またはDBCC CHECKDBその時点で実行する)直前に実行します。

  1. DBCC CHECKALLOC データベース上
  2. 走る DBCC CHECKCATALOG
  3. DBCC CHECKTABLE各テーブルに対して実行(読み取り専用ファイルグループの列ストアテーブルを除く)
  4. 実行することもできますDBCC CHECKCONSTRAINTS

Paul RandalによるVLDBの一貫性チェックオプションおよび複数日にわたるDBCC CHECKDBの Q&Aを参照してください。


9

まず、情報と再生コード/状況に感謝します。

私はこれを取り、内部アイテムを提出しました。それは割り当てられており、間もなく見られます。

ファイルグループでの作業にread_onlyに投票すると、dbcc checkdbがSQL Serverフィードバックサイトで実行されなくなります。

入手可能になった時点で、この回答をより多くの情報で更新します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.