web-dev-qa-db-ja.com

DBCC CHECKDBはtempdbを巨大なサイズに拡張します-レガシーMS SQL Server 2008 R2インスタンス

古いMicrosoft SQL Serverインスタンスがあります(2008 R2 SU3 GDR-ビルド:10.50.6220)。メンテナンスプランを介してDBCC CHECKDBを実行すると、TempDBが非常に大きくなります。

インスタンス上の最大のDBは95GBであり、データ整合性チェックの実行中にtempdbはファイルシステムがいっぱいになる前に40GBに成長しました。

エラーメッセージは次のとおりです。

クエリ "DBCC CHECKDB(N '[dbname]')WITH NO_INFOMSGS"の実行は、次のエラーで失敗しました:「 'PRIMARY'のため、データベース 'tempdb'にオブジェクト 'dbo.SORT一時実行ストレージ:140907993825280'のスペースを割り当てることができませんでしたファイルグループがいっぱいです。不要なファイルを削除するか、ファイルグループ内のオブジェクトを削除するか、ファイルグループにファイルを追加するか、ファイルグループ内の既存のファイルに対して自動拡張をオンに設定して、ディスク領域を作成してください。データベース 'tempdb'のトランザクションログがいっぱいです。ログのスペースを再利用できない理由については、sys.databasesのlog_reuse_wait_desc列を参照してください。チェックが終了しました。ファクトの収集中にエラーが検出されました。tempdbのスペース不足またはシステムテーブルに一貫性がない可能性があります。以前のエラーを確認してください。」考えられる失敗の理由:クエリの問題、「ResultSet」プロパティが正しく設定されていない、パラメーターが正しく設定されていない、または接続が正しく確立されていない。

最初のアクションステップは、tempdbを独自のドライブに移動することです。ただし、使用するtempdbスペースが少ない完全なCHECKDB(PHYSICAL_ONLYではない)を実行する方法を見つけたいと思います。現在、SQL Serverの新しいバージョンにアップグレードできません。

役立つヒントはありますか?

2
T Mase

異常ではありますが、実際には深刻な提案です。データベース内のすべてのインデックス(またはその一部)を削除すると、「DBCC CHECKDB」でチェックする項目が少なくなります。もちろん、後で元に戻すこともできます...

または、インデックスを再構築すると、CHECKDBが分析するデータの配置がより単純になる場合があります...これは実際の推測ですが、少なくともテーブルを格納するために使用するページが少なくなる場合があります。

https://technet.Microsoft.com/en-us/library/ms176064(v = sql.105).aspx は、CHECKDBのワークロードを増減するいくつかのWITHオプションと、別のオプションESTIMATEONLYについて説明していますこれにより、すべてのチェックがスキップされますが、チェックに必要なtempdbの容量がわかります。 ESTIMATEONLYを使用して他のパラメーター(つまり、TABLOCK、PHYSICAL_ONLY)を設定すると、これが異なることを意味します。これらはいくつかのチェックをスキップします。

説明されているように、CHECKDBのほとんどすべてのチェックは、異なるコマンドとして実行できます。

https://www.mssqltips.com/sqlservertip/2399/minimize-performance-impact-of-sql-server-dbcc-checkdb/ には、データベースバックアップの別のバックアップへの復元など、パフォーマンス関連の提案がありますチェックするサーバー。これも、復元サーバーが新しいバージョンのSQL Serverを実行していて、復元中に元のデータベースの欠陥を静かに「修正」し、コピーにそれらが表示されない場合、完全なチェックではない可能性があります。

1
Robert Carnegie