web-dev-qa-db-ja.com

空のテーブルでの実行に15分以上かかるDBCC CHECKTABLE

いくつかの小さなテーブルまたは空のテーブルでDBCC CHECKTABLEを実行するのに15分以上かかるデータベースがあります。終了しても、障害やエラーはありません。サーバー上の他のすべてのパフォーマンスは非常に許容できる形式です。同時に実行されているものは他にありませんでした。

また、DBCC CLEANTABLEを試し、フルスキャンで統計を更新しました。

SQL Server 2016 Enterprise Edition(13.0.5201.2)を使用しています

テーブルの例:

CREATE TABLE [Schema1].[Table1](
    [col1] [int] NOT NULL,
    [col2] [nvarchar](100) NOT NULL,
    [col3] [xml] NOT NULL,
 CONSTRAINT [PK_1] PRIMARY KEY CLUSTERED 
(
    [col1] ASC,
    [col2] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
7
Russ960

私はMicrosoftとのインシデントを開いてしまい、sys.sysrscols(DAC経由でのみアクセスできる)には2億行以上あることが判明しました。レビューを行った後、DBCC SQL Serverの一部として、DBCC CHECKTABLEであっても常にシステムテーブルのチェックを行うことがわかりました。 DBCC CHECKTABLEマニュアル から:

整合性チェックは、常にすべてのシステムテーブルインデックスに対して実行されます。

私の理解では、sys.sysrscolsはいくつかの列追跡を行い、サイズが大きいのは、2,000以上のパーティションと163列のテーブル(200以上)があるためです。それらのほとんどすべては、アプリケーションによって削除されるべきであったはずの一時的な作業テーブルでした。私はそれらをクリアし、プロセスは1分未満の空のテーブルの通常の応答時間に戻りました。

また、パーティションはDBCCチェックに影響を与える可能性があることをドキュメントに記載しています。 From パーティション分割されたテーブルとインデックス

DBCCコマンド

パーティションの数が多いと、パーティションの数が増えるにつれて、DBCCコマンドの実行に時間がかかる場合があります。

6
Russ960