MSSQLSERVER_8645

適用対象:SQL Server

詳細

属性
製品名 SQL Server
イベント ID 8645
イベント ソース MSSQLSERVER
コンポーネント SQLEngine
シンボル名 MEMTIMEDOUT_ERR
メッセージ テキスト リソース プール '%ls' (%ld) でクエリ実行のためのメモリ リソースを待機中にタイムアウトが発生しました。 クエリを再実行してください。

説明

このエラーは、SQL Server要求がクエリ実行 (QE) メモリを長時間待機し、メモリが使用できなかった場合に発生します。 クエリ実行メモリは、主に並べ替え操作、ハッシュ操作、一括コピー操作、インデックスの作成と作成に使用されます。 これらの操作のいずれかを実行するクエリは、メモリ許可を要求します。 使用可能なメモリがない場合、クエリはメモリが使用可能になるまで RESOURCE_SEMAPHORE を待機するように設定されます。 20 分以上待機した後にメモリを使用できない場合、SQL Serverはエラー 8645 "メモリ リソースがリソース プール 'default' でクエリを実行するのを待っている間にタイムアウトが発生しました。 タイムアウト値は、SQL Serverのバージョンによって若干異なります。 sys.dm_exec_query_memory_grantsを調 timeout_sec べることで、サーバー レベルで設定されたタイムアウト値 表示される場合があります。

原因

このエラーは、メモリ許可と、そのメモリが使用可能になるまでの長時間の待機に関連して確認できます。 通常、クエリが完了すると、使用する実行メモリが解放されます。 したがって、このエラーが表示された場合は、タイムアウトしたクエリが他の要求を 20 分以上待機して作業を完了したことを意味します。 使用可能なすべての QE メモリを消費した要求が 1 つだけ存在する場合や、多数の要求があり、それらのメモリ許可が QE メモリを使い果たした可能性があります。 ワークロードで実行時間の長い要求がある場合は、実行時間を短縮し、使用する QE メモリの量を減らすように対策を講じます。

ユーザー アクション

Resource Governorを使用して特定のワークロードのメモリ プールを制限していない場合は、サーバーの全体的な状態とワークロードを確認できます。 リソース プールまたはワークロード グループ設定Resource Governor チェックを使用している場合。

詳細な説明とトラブルシューティング手順については、「SQL Serverのメモリ許可によって発生するパフォーマンスの低下またはメモリ不足の問題のトラブルシューティング」を参照してください

次の一覧は、前述の記事で詳しく説明されている手順をまとめたものです。 これらの手順は、QE メモリ エラーの削減または排除に役立ちます。

  1. SQL Server内のどの要求が大きなメモリ許可または QE メモリ コンシューマーであるかを特定します。 詳細については、「 クエリ実行メモリの待機を識別する方法」を参照してください。

  2. 並べ替え操作とハッシュ操作を最小限に抑えるか回避するためにクエリを書き換えます。

  3. 統計を更新し、定期的に更新して、SQL Serverがメモリ許可を正しく見積もるようにします。

  4. 特定されたクエリまたはクエリに適切なインデックスを作成します。 インデックスを使用すると、処理される行の数が多くなり、JOIN アルゴリズムが変更され、許可のサイズが小さくなり、完全に削除される場合があります。

  5. 可能な場合は、クエリで OPTION (min_grant_percent = XX、max_grant_percent = XX) ヒントを使用します。

  6. QE メモリ使用量の影響を特定のワークロードのみに制限するには、Resource Governorを使用します。

  7. SQL Server 2017 および 2019 では、アダプティブ クエリ処理を使用して、メモリ許可フィードバック メカニズムを使用して、実行時にメモリ許可サイズを動的に調整できます。 この機能により、最初にメモリ許可の問題が発生しなくなる可能性があります。

  8. メモリSQL Server増やすか、既存の設定を調整します。

    1. 次に示す SQL Server メモリ構成パラメーターを確認します。

      • max server memory - 必要に応じて増やします
      • min server memory
      • min memory per query
    2. 通常とは異なる設定がないか確認します。 必要に応じて、これらを修正します。 SQL Server で増加した必要なメモリの要件を把握しておきます。 既定と推奨される設定は、「 サーバー メモリ構成オプション」 に一覧表示されます。

  9. OS レベル (物理または仮想 RAM) でメモリを増やします。

  10. このサーバー上で、他のアプリケーションやサービスによってメモリが消費されていないか確認します。 より少ないメモリを消費するか、別のサーバーに移動するように、重要度の低いアプリケーションまたはサービスを再構成します。 この操作により、外部メモリの負荷を取り除くことができます。

  11. 次の DBCC コマンドを実行して、いくつかのSQL Serverメモリ キャッシュ (一時的なメジャー) を解放します。

  • DBCC FREESYSTEMCACHE
  • DBCC FREESESSIONCACHE
  • DBCC FREEPROCCACHE