トップ回答者
クエリの並列実行に必要なスレッド リソースを開始できませんでした。

質問
-
以下の環境および処理にて、以下のエラーが発生しています。
エラーコード 8642
レベル 17
クエリ プロセッサは、クエリの並列実行に必要なスレッド リソースを開始できませんでした。環境
Windows Server 2008(32bit)
SQLServer 2008 R2
物理メモリ4G処理
Javaプログラムが100本並列で起動し、それぞれがコネクションを取得して、
100レコード位にINSERT、DELETE、UPDATEを毎時間実施します。
発生頻度は1週間に数回です。SQLServerはデフォルト設定です。
原因調査のポイント、解決案などありましたら
アドバイスをお願いします。- 移動 三沢健二Moderator 2011年7月14日 6:22 適切なカテゴリと判断したため (移動元:Windows Server 2008 R2 全般)
回答
-
スレッドのリソースが足りない(枯渇)って事に着目して調査されては?(そういうキーワードで調べられては?)
スレッドそのままではないですが、ハンドルという単位でトラブルシュートする時の追い方で以下のようなURLを参考にしてみてはいかがでしょうか。
http://keicode.com/iis/iis504.php
同様にスレッドカウントはWindowsのパフォーマンスモニタで確認できます。
システム動作当初から比べて、リークしている値がないでしょうか?
枯渇した状態で一度カウンタを一通り採取して、Javaのプログラムを再起動した時に、カウンタがリセットされ、
また、徐々に増えている値があれば、それが問題なのかと。リークしている時に該当のエラーが出ていれば、なお証明になります。
-
OSの情報を調べているようですし、daisukyさんの提示されたURLも同じくOSから全体を調査するようになってしまいます。
しかし、SQL Serverは自身でもリソース管理していて、Managemant Studioの利用状況モニタからそれを確認することができます。
利用状況モニタを使用して、Javaプログラムが想定外の動作をしていないかを確認するべきです。例えば、100本並列で起動と書かれていますが、その100本がそれぞれ100コネクションSQL Serverと接続していたりとか、異様にコストのかかるクエリを乱発しているとか。
すべての返信
-
コメントありがとうございます。
サーバーの運用中は、CPU使用率がかなり高い数値で推移しておりますが、
物理メモリの空き容量はまだ余地があります。
OSのパフォーマンスモニタにて、発生当時のProcesserやMemory、
SQLServerのMemory ManagerやBuffer Manegerなどの情報を持っています。
今後の進め方として、処理そのものの稼働を抑えるという判断の前に、
CPUやメモリの増強、あるいはSQLServerのパラメータ調整の余地があるかなど、
パフォーマンスモニタの値から、判断材料となるものはありますでしょうか?
-
スレッドのリソースが足りない(枯渇)って事に着目して調査されては?(そういうキーワードで調べられては?)
スレッドそのままではないですが、ハンドルという単位でトラブルシュートする時の追い方で以下のようなURLを参考にしてみてはいかがでしょうか。
http://keicode.com/iis/iis504.php
同様にスレッドカウントはWindowsのパフォーマンスモニタで確認できます。
システム動作当初から比べて、リークしている値がないでしょうか?
枯渇した状態で一度カウンタを一通り採取して、Javaのプログラムを再起動した時に、カウンタがリセットされ、
また、徐々に増えている値があれば、それが問題なのかと。リークしている時に該当のエラーが出ていれば、なお証明になります。
-
OSの情報を調べているようですし、daisukyさんの提示されたURLも同じくOSから全体を調査するようになってしまいます。
しかし、SQL Serverは自身でもリソース管理していて、Managemant Studioの利用状況モニタからそれを確認することができます。
利用状況モニタを使用して、Javaプログラムが想定外の動作をしていないかを確認するべきです。例えば、100本並列で起動と書かれていますが、その100本がそれぞれ100コネクションSQL Serverと接続していたりとか、異様にコストのかかるクエリを乱発しているとか。