古い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の新しいバージョンにアップグレードできません。
役立つヒントはありますか?
異常ではありますが、実際には深刻な提案です。データベース内のすべてのインデックス(またはその一部)を削除すると、「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を実行していて、復元中に元のデータベースの欠陥を静かに「修正」し、コピーにそれらが表示されない場合、完全なチェックではない可能性があります。