8651: Could not perform the operation because the requested memory grant was not available(要求されたメモリ許可が利用できないため操作を実行できない)
SQL Server意味
クエリに必要なメモリ許可が利用できず、操作を実行できなかった。8645 とは異なり、これは待機ではなく、要求された大きなメモリブロックを提供できないという即時の失敗であり、通常は深刻なメモリ逼迫を示す。
原因
サーバー上の利用可能なクエリメモリが、単一の演算子 (例: 非常に大きなソート/ハッシュ) が要求する許可を満たせない。過度に高いメモリ見積り、低い max server memory、外部からのメモリ逼迫、または Resource Governor の低い上限 (ワークロードグループの REQUEST_MAX_MEMORY_GRANT_PERCENT やリソースプールの MAX_MEMORY_PERCENT) が原因となる。
対処方法
メモリ許可を膨張させるクエリを最適化する (統計の更新、適切なインデックス作成、クエリの分割)。総メモリと利用可能メモリを監視し、max server memory の設定と外部アプリケーションによるメモリ逼迫を確認する。Resource Governor を使用している場合は、ワークロードグループの REQUEST_MAX_MEMORY_GRANT_PERCENT とプールの MAX_MEMORY_PERCENT の設定を見直す。メモリ集約型のバッチジョブはオフピーク時間帯に移す。
同じデータベースの他の項目
- 7202Could not find server 'name' in sys.servers(sys.servers にサーバー 'name' が見つからない)
- 40501The service is currently busy. Retry the request after 10 seconds(サービスは現在ビジー。10 秒後に要求を再試行)
- 8645A time out occurred while waiting for memory resources to execute the query(クエリ実行用のメモリリソース待機中にタイムアウト発生)
- 5061ALTER DATABASE failed because a lock could not be placed on database(データベースにロックを設定できないため ALTER DATABASE が失敗)
- 3702Cannot drop database because it is currently in use(データベースは使用中のため削除できない)
- 15138The database principal owns a schema in the database, and cannot be dropped(データベースプリンシパルがスキーマを所有しているため削除できない)
- 1934INSERT/UPDATE failed because the following SET options have incorrect settings(次の SET オプションの設定が誤っているため INSERT/UPDATE が失敗)