web-dev-qa-db-ja.com

パーティションテーブルのCheckDB-リソースプールのデフォルトのメモリが不足しています

CheckDBがリソースプール「デフォルト」を吹き飛ばしているサーバーの1つで問題が発生しています...詳しく説明します。

Windows 2012R2標準-16GB RAM SQL Server 2012 Enterprise [11.0.5532.0] MAXメモリ14GBRAM、MINメモリ0GBこれは、Microsoft SQLServerのデフォルトインスタンスを1つ実行する専用SQLServerです。Vanillaインストール特別な要件や構成はありません。

他のすべてのデータベース(データベースあたり最大サイズ3GB、9ユーザーデータベース)をCheckDBできますが、5GBデータベースをCheckDBすると、10分のレポート後に失敗します。

「リソースプール 'default'にこのクエリを実行するにはシステムメモリが不足しています。[SQLSTATE42000](エラー50000)DBCCの実行が完了しました。DBCCがエラーメッセージを出力した場合は、システム管理者に連絡してください。」

これはベンダーデータベースであり、変更することはできません。2つのファイルグループで構成され、両方のファイルグループにそれぞれ1,000のパーティションを含む248のテーブルが含まれています。

メモリ要件に違いが生じた場合に備えて、DBCC CheckDBALL_ERRORMSGS NO_INFOMSGSの組み合わせで試しましたが、動作に変化はありませんでした。テーブルをロックできないため、TABLOCKを使用できません。 DBCC CheckFileGroupを試しましたが、同じエラーメッセージが返されます。軽量チェックのためにPhysicalOnlyを実行してみることができますが、完全なCheckDBを週に1回実行したいと考えています。

すべてのデータベースに使用される(割り当てられていない)合計ディスク容量は8,797MBです。RAM SQL Serverへの割り当てで、使用可能は14GB [14,336 MB]

私の質問は.... 5GBデータベース全体がメモリに収まるはずです(そして5GB以上のRAMが利用可能であることを確認しました.....このボリュームのパーティションとパーティションテーブル1つまたは2つのファイルグループを使用するデータベースでは、過剰なメモリ消費が発生しますか?パーティションテーブルがより多くのメモリを必要とするというMicrosoftのドキュメントが見つかりません...多くのファイルグループにわたるパーティションテーブルだけが、VLDBのCheckDB時間/リソース要件の削減に役立ちます。

現在DBCC CheckDB WITH ESTIMATEONLYを実行しており、結果が得られたら更新します。更新:ESTIMATEONLYは次のメッセージを返します:

''のDBCC結果。 CHECKDBは、データベース ''で0の割り当てエラーと0の整合性エラーを検出しました。メッセージ701、レベル17、状態123、1行目このクエリを実行するには、リソースプール「デフォルト」にシステムメモリが不足しています。

どんな入力でも大歓迎です!

3
David Warner

問題は、sys.sysrscolsが非常に大きくなるために大量のパーティションが存在することであり、SQL Serverでは、この記事のとおり、CheckDBのコストモデルに興味深い問題があるようです https:// www.sqlskills.com/blogs/jonathan/dbcc-checkdb-execution-memory-grants-not-quite-what-you-expect/ 。 CheckDBは大容量のメモリ要求を行い、これにより、CheckDBの実行時に使い果たされたバッファプールからメモリが盗まれると考えられます。メモリを24GBに増やし、5GBテーブルのCheckDBは11分で実行されますが、最大メモリを15GBに減らすと、1時間以上かかり、14GBに減らすと、バッファプールが使い果たされます。これが将来他の誰かに役立つことを願っています..... sys.sysrscolsテーブルのサイズが大きいため、パーティショニングによってCheckDBからのメモリ要求が増える可能性があると思います...しかし、間違っていることが証明されてうれしいです:- )

2
David Warner

ポールの説明があなたの質問に答えるかもしれません、あなたはここを見ることができます http://www.sqlskills.com/blogs/paul/checkdb-from-every-angle-why-would-checkdb-run-out-of -スペース/ 。あなたの質問に関連する彼の投稿からスニペットをコピーして貼り付けました:

DBCCCHECKDBがスペース不足エラーで停止する可能性があるもう1つの理由があります。 DBCC CHECKDBは、データベース全体の内容を検証する必要があります。そのため、データベーススキャン中のある時点で見たものに関する情報を保存して、データベーススキャン中の後の時点で見たものとその情報を照合できるようにする必要があります。これらの情報は、メモリ内の作業テーブルに保存されます。ただし、多くの場合、保存されている情報の量が使用可能なメモリを超えているため、ワークテーブルはtempdbに波及する必要があります。 (たとえば、16GBのメモリを搭載したマシンで1TBのデータベースに対してDBCCCHECKDBを実行すると、DBCC CHECKDBが中間の情報を格納するために必要な情報の量が、SQL Serverで使用可能なメモリを超える可能性があります)。したがって、tempdbが作業テーブルを格納するのに十分な大きさでない場合は、拡張する必要があります。拡大できない場合、DBCC CHECKDBは動作するためにワークテーブルが必要なため、失敗します。

2
Firasath Ahmed