DBCC CHECKDB のパフォーマンスの最適化

通常、DBCC CHECKDB および関連ステートメントは、割り当てられた各ページをチェックできるようにディスクからメモリに読み込む必要があります。このため、システムで既にさまざまな処理が行われているときに DBCC CHECKDB を実行すると、次の 2 つの理由で DBCC のパフォーマンスが低下します。第一に、使用可能なメモリが少なくなるため、SQL Server データベース エンジンは DBCC CHECKDB の内部データの一部を tempdb データベースにスプールする必要があります。第二に、DBCC CHECKDB はディスクからデータを読み取る方法を最適化しようとします。集中的なワークロードでも同じディスクを使用している場合は、最適化が不十分なため、実行速度が遅くなります。

tempdb データベースはディスクに常駐するため、ディスクへのデータの書き込みやディスクからのデータの読み取り時の I/O 操作がボトルネックになると、パフォーマンスが低下します。システムの利用状況に関係なく、空きメモリ容量に比べて大きなデータベースに対して DBCC CHECKDB を実行すると、tempdb データベースにスプールが行われます。したがって、tempdb データベースは、ユーザー データベースとは別に、独立した RAID デバイスなどの高速ディスクに配置する必要があります。詳細については、「ALTER DATABASE (Transact-SQL)」および「RAID」を参照してください。

注意

DBCC CHECKDB を実行すると、データベースの各テーブルに対する DBCC CHECKTABLE だけでなく、DBCC CHECKALLOC と DBCC CHECKCATALOG も自動的に実行されるため、別々に実行する必要はありません。