none
SQLエージェントが突然大量のメモリーを消費し、システムメモリー不足のエラー(イベントID:701)が発生 RRS feed

  • 質問

  • 対象のSQL Server のバージョンは2005 SP3となります。

    本番稼働中に、突然システムメモリー不足によりリモートDB接続や、サーバーへのRDP接続不能となりました。
    サーバー再起動後、ログを確認したところ、以下の内容のエラー/警告が出力されておりました。

    <<アプリケーションログ>>
    イベントID:701 このクエリを実行するには、システム メモリが不足しています。

    <<システムログ>>
    ソース:Resource-Exhaustion-Detector
    タスクのカテゴリ:リソース消費診断イベント
    Windows は仮想メモリの不足状態を診断しました。仮想メモリを多く消費したのは次のプログラムです:
    sqlservr.exe (7868) は 55161053184 バイトを消費し、SQLAGENT90.EXE (7180) は 12209401856 バイトを
    消費し、MsDtsSrvr.exe (5212) は 678649856 バイトを消費しました。

    上記プログラムの内、sqlserverは、最大メモリーの範囲内であり、想定内です。
    問題はSQLAGENT90で、通常は数十MB程度のメモリーで稼働しているようですが、
    問題発生時は、上記ログ内容の通り、いきなり10GBを超えるメモリーが使われはじめ、仮想メモリー空間
    を一気に使い果たしてしまいました。

    過去のバグレポートを確認したところ、イベントID:701に関する報告は、いくつか存在していましたが、
    SQL Server 2005 SP3では、すべてFIXされているようにも見受けられます。

    確認したい内容としては、
    ・SQLAGENT90.exeが突然10GBを超えるメモリーが使われ始めた事の原因(考えられるケース)
    ・SQL Server 2005 SP3以降で、イベントID:701に関するトラブル報告は存在するか?
    ・再発防止として、SQLエージェントで使用可能なメモリー上限値を設定可能か?

    の以上3点となります。

    よろしくお願いいたします。

     

    2011年6月8日 7:13

回答

  • こんばんは。大変ですね。
    このKBは該当しませんでしょうか。SQL Server 2005 SP3 CU6 です。 
    http://support.microsoft.com/kb/974130
    英語ですが参考になるかもしれません。
    http://blogs.us.sogeti.com/sqlserver/monitor-sql-agent-memory-consumption/
    • 回答の候補に設定 山本春海 2011年6月20日 8:27
    • 回答としてマーク 山本春海 2011年6月22日 8:47
    2011年6月10日 13:21
  • 事例に心当たりはないのですが、そのときAgentが何をしていたのでしょうか。
    またAgentをそもそも利用しない環境であれば停止してはいかがでしょうか。
    リソースを制御するにはWindowsの機能のリソースマネージャで可能ですし、
    パフォーマンスログから警告を設定できるので、Agentプロセスのメモリ使用量が
    ある程度大きくなったときに警告を出してみてはどうでしょうか。

    http://technet.microsoft.com/ja-jp/library/cc753446.aspx

    エラー701はKBを調べると不具合などもありますが、
    クエリ実行時のメモリ不足のエラーなのでどのバージョンでも発生しうると思います。

    • 回答の候補に設定 山本春海 2011年6月20日 8:27
    • 回答としてマーク 山本春海 2011年6月22日 8:46
    2011年6月9日 7:05
    モデレータ

すべての返信

  • 事例に心当たりはないのですが、そのときAgentが何をしていたのでしょうか。
    またAgentをそもそも利用しない環境であれば停止してはいかがでしょうか。
    リソースを制御するにはWindowsの機能のリソースマネージャで可能ですし、
    パフォーマンスログから警告を設定できるので、Agentプロセスのメモリ使用量が
    ある程度大きくなったときに警告を出してみてはどうでしょうか。

    http://technet.microsoft.com/ja-jp/library/cc753446.aspx

    エラー701はKBを調べると不具合などもありますが、
    クエリ実行時のメモリ不足のエラーなのでどのバージョンでも発生しうると思います。

    • 回答の候補に設定 山本春海 2011年6月20日 8:27
    • 回答としてマーク 山本春海 2011年6月22日 8:46
    2011年6月9日 7:05
    モデレータ
  • ご回答ありがとうございます。

    まず、SQLAgentで実行/管理しているジョブが多数存在しているため停止することは出来ません。
    また、Agentプロセスのメモリーを監視して、ある閾値でアラートを飛ばす事も可能ですが、
    今回の事象は僅か数分の間に、それまでMB単位のメモリー使用率であったものが一気に10GBもの
    仮想メモリー(未使用サイズすべて)を使われてしまったため、アラート設定では防ぎようが
    ございませんでした。
    クエリー実行時のジョブを確認しても、毎日定期的に問題なく処理されているジョブばかりで、
    仮にクエリーの問題があったにしろ、これだけのサイズのメモリーが消費されてしまった事で
    どうしても不具合の方を疑ってしまっております。

    リソースマネージャで制御する事は、有効な手段かと思われますので、検討させて頂きます。

    問題の事象の本質については、残念ながらSQL Server 2005のサポート終了により、
    問い合わせる事が出来ませんでしたので、もし再発する様でしたらプロフェッショナルサポートの
    登録を検討したいと考えております。

    2011年6月10日 6:29
  • こんばんは。大変ですね。
    このKBは該当しませんでしょうか。SQL Server 2005 SP3 CU6 です。 
    http://support.microsoft.com/kb/974130
    英語ですが参考になるかもしれません。
    http://blogs.us.sogeti.com/sqlserver/monitor-sql-agent-memory-consumption/
    • 回答の候補に設定 山本春海 2011年6月20日 8:27
    • 回答としてマーク 山本春海 2011年6月22日 8:47
    2011年6月10日 13:21
  • とても有益な情報ありがとうございます。
    当該環境は、リンクサーバー経由で実行されているジョブが多数存在しており、
    まさに、文書番号974130に記載のメモリーリーク問題にヒットした可能性がございます。

    ジョブを確認した上で、もし該当しそうでしたら、更新プログラムの適用を検討したいと思います。

    ありがとうございました。

    2011年6月13日 2:43