- ベストアンサー
「使用できるメモリが足りません」と出た原因を調べたい
データベースサーバの環境 OS:Windows server 2000 SP4 DB:Microsoft SQL Server 8 イベントビューアのアプリケーションログを見ていると、「使用できるメモリが足りません」というエラーが出ていました。 このエラーが出た原因と、なぜ回復したのかを調べたいと思います。 エラーが出た時間、SQLに与えられた命令を調べるには、どうすればいいのでしょうか。 SQLプロファイラを使えばいいのかと思い、下記ページを参考に実行してみましたが、出てきたデータをどう判断すればいいのか、よくわかりません。 http://d.hatena.ne.jp/kahze/20090315/1237117908
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
ご存じのとおり、プロファイラは今をトレースするものです。 その時にトレースをかけていない限り、実行していたSQL文を割り出すことはできないです。 定期的にリソースを監視する仕組みを予め用意していない限り、過去のイベントの手がかりはSQL Serverのログしかありません。ログにそれが記録されていたとしても、おそらくそれが発生したプロセスIDがわかる程度で、それ以外の手がかりを得られることは多くないです。 したがって、その「イベントログに記録されたものがどのシステムからのもので、一時的なものなのかどうか」は今となっては特定できない可能性が高く、再発を待つしかないと思います。 その再発に備えて、発生時刻やログから何か得られればその手がかりをもとに、定期的にトレースを掛けることで、再発時にそのプロセスを実行していた端末は何か、SQL文は何かを割り出せる可能性は高くなるでしょう。
その他の回答 (1)
- 0909union
- ベストアンサー率39% (325/818)
>イベントビューアのアプリケーションログを見ていると、「使用できるメモリが足りません」というエラー 質問者が、何をしたいのかいまいち不明ですが、このエラーはSQLserverが出したものでしょうか? もしそうだとしたら、DBに割り当てたメモリーが足りないだけですが? この手の業務用RDBMSは大抵システムダウンを回避するため、DBが使用するメモリーを最初から限定しています(設定しています)。さらに、トランザクションごと細かく割り当てるメモリーを設定可能です。又は設定されています。 例えばインデックスを作成するに当たって最初の割り当て、次に確保するメモリーの大きさです。これは、検索や、データー登録、更新、全てにおいて定義されています。これらに割り当てにしたがって、次々にメモリーを確保していった時に、DBMSに割り当てられたメモリーを超えた時に、このようなメッセージがでます。 たまにシステムを超えた設定をしてしまう場合もあり、OS側でメモリーエラーが出てしまう場合がある。つまり、SQL側でなくOSのシステムとして出ている時もあります。 単にSSQLServerのログをみれば、どこでエラーになったか分かると思いますが? 記載されているURLの 3)SQL Server Profilerを使ってSQL Serverの利用状況をトレースする にやり方でていますが、前述の事を把握していれば、それぞれのアプリでDBを構築していると思いますが、例えばアドレス帳検索システムで発行されるSQLでトランザクションを把握していれば、GUIでの操作とプロセスがバインドできるかと思います。そのプロセスの監視です。 メモリーのデルタ値で、どれだけの幅になるかですよね。これがマシンにどれだけ影響でるかは、リソースがどれだけ残っているかです。 結局の所、実例が挙がっていないので、アドバイスは概要だけになってしまいます。
補足
回答ありがとうございます。 言葉足らずだったようで、すみません。 >このエラーはSQLserverが出したものでしょうか? そうです。 もちろん、割り当てたメモリが不足しているのはわかります。 DBを利用しているアプリは複数あるのですが、そのうちのどれがメモリ不足の原因になっているのかを知りたいのです。 一時的にアクセスが多くなっただけなのか、そうでないのかをはっきりさせたい。 この説明で少しわかりやすくなったでしょうか?
補足
回答ありがとうございます。 昨日試して気づいたのですが、プロファイラは「今以降」をトレースすることしかできないんですね。 仰るとおり、ログを見てプロセスIDはわかりましたが、詳しいことはわかりませんでした。 該当するプロセスは普段なら問題なく動いているものです。 「使用できるメモリが足りません」と出たとき、具体的に何があったかはもうわからないということですね。 今度再発した時に規則性を探りたいと思います。