
JDBCのパフォーマンスがあがらず困っています。
LinuxマシンでOracleを稼働しており、そこにJDBCで接続しています。単一でのアクセスでは全く問題のないパフォーマンスですが、同時接続数が2以上になると途端に悪くなります。
# スレッド1→スレッド10でレスポンスに5倍の時間がかかってしまう。。。
OracleでMTS設定なども行ってみましたが、変わりませんでした。コネクションプールも行っています。
JDBCを用いてマルチスレッドでアクセスするときにボトルネックとなるポイント、チェック項目等、アドバイスをいただければ助かります。
よろしくお願いいたします。
[環境]
Linux RedHat6.2J(カーネル2.2.14smp)
Oracle8.1.6
JDK1.3.0
JDBCドライバ Oracleで配布しているclasses12.zip
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
補足していただいた内容を読んだ限り、
SQL自体に問題があるようには見えないようです。
とすると、あとは Oracleへの接続部分か
Javaでのロジックをどうにかすることでしょうか。
念のため確認ですが、INSERT/UPDATE文はがんがん実行されているのでしょうか。その場合、Connectionクラスの setAutoCommitメソッドを実行した覚えはあるのでしょうか。
JDBCのデフォルトでは setAutoCommit(true)、すなわち一行文を実行する毎にコミットがかかります。INSERT/UPDATEがあり、トランザクション的に自動コミットがかかるとまずい場合があるので、まず、setAutoCommit(false); として、更にトランザクションの最後に(明示的に) commitメソッドを実行します。もし問題があれば、rollbackメソッドを使って、トランザクションをキャンセルするようにしましょう。ただし、複数のユーザが同一のConnectionクラスのインスタンスを共有している場合にはこの手法は使えないと思います。
この手の話は Oracleの Oracle8i JDBC Developer's Guide and Reference (Oracle8i JDBC開発者ガイドおよびリファレンス)の第6章 Coding Tips and Trouble Shootingに記述されています。
# 恐らく日本語化されて、紙ベースで存在すると思いますが、手元にあるのが US Oracle/technet のドキュメントしかないため、本当に日本語化されているか確認できません。ごめんなさい(^^;
No.1
- 回答日時:
JDBCの問題か Oracleの問題かを切り離して考える必要が
あるのではないでしょうか。
例えば、アプリケーションプログラム中からSQLを取り出したのち、
SQL*Plusを複数起動してそのSQLを同時に実行した場合との
実行時間をまず比較してみてはどうでしょうか。
この回答への補足
アドバイスありがとうございます。
実行時間の比較の方ですが、JDBCとsqlplusの単一クエリーでの差はそれほどありませんでした。複数同時接続があった場合の比較は行っていません。
# sqlplusで複数同時接続の試験方法が思いつかなかったので。
JDBCで複数同時接続しているときに、sqlplusでクエリーを投げてみましたが、その時のレスポンスは問題ないものでした。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【DB】同じトランザクション内...
-
TPSとは・・・
-
dbFailOnError とは?
-
Accessdでの「トランザクション...
-
OracleのROWIDについて…
-
ADO Connection を再利用する方法
-
accessVBAでのワークスペース
-
DATファイルをEXCELで開きたい
-
SQL Server Management Studio ...
-
accessの処理が遅い
-
復旧中のデータベースについて
-
VSAM,QSAM,BSAM,BPAM,BDAM
-
一つのテーブルだけを復元(リス...
-
MS-Accessのエクスポートで異常...
-
mdfファイルの残骸について
-
tempdb の適切なサイズ
-
復元に異常に時間がかかる
-
データベースのアタッチができ...
-
アタッチができない
-
データベース復元時に指定する...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【DB】同じトランザクション内...
-
postgresql についてです
-
Accessdでの「トランザクション...
-
dbFailOnError とは?
-
TPSとは・・・
-
OracleのROWIDについて…
-
汎用系システムのDBについて
-
一つのトランザクションでSELEC...
-
PHP-オラクルでのトランザクション
-
PostgreSQLのクラスタ運用について
-
jmeterについて、教えてください。
-
トランザクション
-
DBMSのロールフォワードについて
-
どうやって指定してよいかわか...
-
ADO Connection を再利用する方法
-
SAPのSPROって何の略ですか?
-
SQL Server 2005トランザクショ...
-
DBのレプリケーション(MS SQL S...
-
トランザクション
-
警察はスマホに保存した動画や...
おすすめ情報