• ベストアンサー

どーも、お世話になってます。

どーも、お世話になってます。 現在、WebLogic Serverバージョン 10.3.3.0を使用してシステムを開発しております。 WebLogicサーバの設定でSQLの実行時間のタイムアウトを設定したくて、 「JDBC」の「接続プールの設定」で「文タイムアウト」にタイムアウトの時間を設定したのですが、どうもうまくいきません。 とりあえずやりたいことがあっているか質問させていただきました。 どなたかご教授ください... orz

質問者が選んだベストアンサー

  • ベストアンサー
  • nnori7142
  • ベストアンサー率60% (755/1249)
回答No.1

 お尋ねの件ですが、指摘サービスソフトウェアのタイムアウト時間については、運用経験がありませんので何とも言えませんが、当方にて運用した経験がある「SQL Server 2005」や「SQL Server 2008」でしたら、サーバ側にてクエリ タイムアウト、レポート実行タイムアウト設定は実施する形態ですので、WebLogic Server側にて何らかの設定が可能ではないでしょうか?  SQL Server 2005/2008でしたら、「SQL Server Management Studio」や「レポート マネージャ」、レポートデザイナーの編集等にて可能ですが・・・。  お役にたてずすいませんが、「http://otndnld.oracle.co.jp/document/products/wls/docs103/jdbc_admin/jdbc_datasources.html#wp1170721」に掲載されています「ステートメント タイムアウトによる文の処理時間の制限」に関する設定で間違ってはいないかと思いますが・・・。

ikechanman
質問者

補足

回答ありがとうございます! 私もこのヘルプを見て設定しました。 文章を見る限りでは、設定はココであっていそうです。 JavaのAPIを確認すると「この時間を経過すると、SQLException がスローされます。」と あるので、試しに時間のかかりそうなSQLを投げてみたのですが、エラーが発生しませんでした。 おそらく投げるSQLが悪い(処理時間がみじかいSQL)と考えています。 今は、外部結合をたくさん行うSQLとwith句でたくさんビューを作る方法をためしてみましたが、ダメでした。 時間のかかるSQLとかご存知でしたら教えていただけませんか?

その他の回答 (3)

  • nnori7142
  • ベストアンサー率60% (755/1249)
回答No.4

 追加補足(2)確認しました。大容量SQLクエリ等の処理となると、SQL-Server2005/2008もそうなのですが、データバッファキャッシュとして物理メモリが利用されるのですが、そのデータバッファキャッシュは、物理メモリが開放されず、SQL-Serverが確保したままとなる点、データバッファキャッシュは、実行したSQLステートメントで扱うデータ量によって消費するメモリ容量が変わる点があり、そのため、実行されたSQLステートメントが蓄積されることにより、大量のメモリを消費することになります。「WebLogic Server」が暴走するのはそのためかと存じます。  恐らくSQL-Serverとそんなに動作上は変わらない筈ですので、一度確保されたデータバッファで使用しなくなったメモリ領域は、内部的に空き容量(Free Pages)として扱われ、内部で空き容量として扱っているだけであるため、メモリ領域を本当に解放していない為、最終的には再起動等が必要になっているかと判断出来ます。  上記のためにある程度のスパンにて、データバッファキャッシュの解放を行い、サーバソフトのレスポンスの向上をみていかないといけないような気がします。WebLogic Serverの場合には、具体的な方法は解りませんが・・・。

ikechanman
質問者

お礼

回答ありがとうございます。 確かに、サーバの状態からするとメモリを使いすぎてレスポンスが 返せない状態にあるみたいです。 何分メモリの性能がよくないので、仕方のないこと?なのかな。 ビジー状態はそれはそれで対処したいと思います。 ありがとうございました!!

  • nnori7142
  • ベストアンサー率60% (755/1249)
回答No.3

 追加補足(2)拝見しました。  抜粋ですが、「WebLogic Server 8.1 SP3 では、JDBC 接続プールに対して次のような属性が追加され、JDBC 接続プールからのデータベース接続において 1 つの文を実行できる時間を制限できるようになりました。  これらの属性は、基底の JDBC ドライバ サポートに依存します。WebLogic Server は、java.sql.Statement.setQueryTimeout() メソッドを使用して JDBC ドライバに指定された時間を渡します。使用している JDBC ドライバでこのメソッドがサポートされていないと、例外が送出される場合があり、タイムアウト値が無視されます。」  の内、末尾4行の「使用している JDBC ドライバでこのメソッドがサポートされていないと、例外が送出される場合があり、タイムアウト値が無視されます。」とあります。  また上記の件で、「これらの機能を使用すると、パフォーマンスが低下する場合があります。これらの機能は、プロダクション環境で使用する前に、ステージング環境またはテスト環境でテストしてください。また、これらの属性は Administration Console では設定できません。これらの機能を有効化するには、手動で config.xml を編集する必要があります。」とあります。  ServerのConfigファイルの編集等他でうまくいきませんでしょうか?

ikechanman
質問者

補足

回答ありがとうございます。 SQLのタイムアウトに関しては、なんとか設定できました。 現在、SQLを実行しWebLogic側で指定した秒数をすぎると、 エラーコード「ORA-01013」がExceptionで帰ってきます。 ですが、大量のデータを処理するようなデータを実行すると WebLogicがビジー状態になってしまいました。 データを5000000件取得するようなSQLです。 タイムアウトの設定を行うとこの辺もOKかと考えていたのですが… ん~うまくいかないです。

  • nnori7142
  • ベストアンサー率60% (755/1249)
回答No.2

 追加補足確認しました。長時間並行処理のクエリ文の提示は難しいですが、「http://www.atmarkit.co.jp/fjava/onepoint/weblogic/weblogic02_3.html」は別件で参考になりませんか?

ikechanman
質問者

補足

回答ありがとうございます。 すみません。orz せっかく調査していただいたのですが、長時間かかるSQL文を実行することができました。 (データを5000000件取得するようなSELECT文) ですが、処理自体に時間はかかっているもののタイムアウトをしてくれません。 Java側で、試しにログを出力してみるとSQL実行後のレスポンスが 帰ってきませんでした。 試しに少なめのデータ(1000000件ぐらい)を取得してみると5秒後ぐらいにレスポンスが 帰ってきます。 そこで、タイムアウトの設定を2秒に設定したのですが、タイムアウトしませんでした。 ん~なんででしょう。 結構手詰まりな感じです。

関連するQ&A