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

このQ&Aに関連する最新のQ&A

A 回答 (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 のドキュメントしかないため、本当に日本語化されているか確認できません。ごめんなさい(^^;
    • good
    • 0

JDBCの問題か Oracleの問題かを切り離して考える必要が


あるのではないでしょうか。
例えば、アプリケーションプログラム中からSQLを取り出したのち、
SQL*Plusを複数起動してそのSQLを同時に実行した場合との
実行時間をまず比較してみてはどうでしょうか。

この回答への補足

アドバイスありがとうございます。

実行時間の比較の方ですが、JDBCとsqlplusの単一クエリーでの差はそれほどありませんでした。複数同時接続があった場合の比較は行っていません。

# sqlplusで複数同時接続の試験方法が思いつかなかったので。

JDBCで複数同時接続しているときに、sqlplusでクエリーを投げてみましたが、その時のレスポンスは問題ないものでした。

補足日時:2001/10/30 14:38
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QSQL、oracleにて文字列操作(連結、切りだし)のパフォーマンス向上法

oracle7を使用しています。

#desc a
num  char(8)
code char(2)
seq char(2)
・・・

#desc b
bango char(12)
・・・

上記場合で aのnum,code,seq を結合したものと bのbangoが
同じかどうかの検索を外部結合付きで行いたいとします。

where
bango(+) = num || code || seq

で動作は正常に行われるのですが、検索速度がかなり重くなってしまいます。
文字列連結(||)は重くなるというのを聞いたことがあるのでできれば
(||)を使用したくないのです。

where
substr(bango,0,8) (+) = num
and substr(bango,9,2) (+) = code
and substr(bango,11,2) (+) = seq

とすると外部結合のところでおこられちゃいました。
文字列連結をつかわずに上記SQLの検索パフォーマンス向上法を
どなたか教えていただけませんか?

oracle7を使用しています。

#desc a
num  char(8)
code char(2)
seq char(2)
・・・

#desc b
bango char(12)
・・・

上記場合で aのnum,code,seq を結合したものと bのbangoが
同じかどうかの検索を外部結合付きで行いたいとします。

where
bango(+) = num || code || seq

で動作は正常に行われるのですが、検索速度がかなり重くなってしまいます。
文字列連結(||)は重くなるというのを聞いたことがあるのでできれば
(||)を使用したくないのです。

where
substr(ban...続きを読む

Aベストアンサー

再投稿です。CONCAT()関数は試してみましたか?
||演算子と同じです。
でも処理時間が早くなるか自信ないです。
うまくいかなかったらすみません。

where
bango(+) = CONCAT(num, code, seq)

QOracle8.1.6 for Linuxのインストール

LinuxにOracle8.1.6をインストールする予定なのですが、
X-Windowが必須であると聞いております。

専用データベースサーバとして使用するつもりなので、
できれば、Xのインストールは行いたくありません。

また、物理的な条件(サーバの設置場所)から、
別ホストのX-Serverを利用することも難しそうです。

そもそも、本当にXが必須なのでしょうか?
シェル上でのCUIベースのインストールはできないのでしょうか?
(典型的なサーバアプリなのだから、できても良いと思うのですが。。。)

Aベストアンサー

Oracle8.1.6(Linux)にはXが本当に必要なのか?

回答)絶対必要です。

Oracle Universal Installer(OUI)は、X Window Systemのロケールで起動するため、Oracle8iからはX Window SystemとJAVAを使用したこのOUIが利用されるようになりました。
その結果、ハード的には最低でも256Mのメモリーの実装が必要になり、ソフト的にはインストール必須のツールとなっています。

また、そのインストール時には、別のターミナルを使って別スクリプトをコールする場所があるため、一旦それを解除してから起動することは出来ないためです。

また、サイレントインストールを行う場合でも同様に、X-Windowが必要となるためX-Windowを使用せずにインストールすることは不可能であると思われます。

QRed Hat Linux7.3にOracle8i 8.1.7

Red Hat Linux7.3にOracle8i 8.1.7をインストールしようとしているのですが、どうしてもインストールが出来ません。
環境変数やJREのインストール後、KDEからoracleユーザーでログインし
./runInstallerを実行するのですが$ Initializing Java Virtual Machine.... pleas wait..と表示されたまま前に進みません。

Aベストアンサー

Oracleのインストール要件を確認してください。

Oracle 8.1.7 は RedHat 7.1.3 はサポートしていません。
どうしてもインストールしたかったら自己責任で
やるしかないでしょう。
でも変な動きをしてもオラクル社は何の責任も
取らないと思いますよ。
やめておいた方が無難です。

参考URL:http://www.oracle.co.jp/products/system/o8/linux817/

QORACLE8 を Linux (REDHUT7.2)インストール

はじめまして ヤブと申します。

Oracle8 Workgroup Server for Linuxをマニュアル等を参考に環境変数も登録して
インストールしたのですが、最後の方で「
Relinking Error. The executables for Oracle8
Standard (RDBMS) were not made successfully.
Please check the log file (/u01/app/oracle/
product/8.0.5/orainst/install.log) and repeat
the installation procedure for Oracle8 Standard (RDBMS).
」のエラーが出て正常にインストールできません。
インストールログを見ても解決策がわかりません。
インストールログは「
--------------[ rdbms.ins 2640
Action: Relinking Error.
The executables for Oracle8 Standard (RDBMS) were not made successfully.
Please check the log file (/u01/oracle/product/8.0.5/orainst/install.log)
and repeat the installation procedure for Oracle8 Standard (RDBMS).
--------------[ rdbms.ins 2643
」です

どこのサイトを探しても 質問はあっても解決された方が
いないようです。

大変申し訳ないのですが 考えられる点を教えて下さい。
よろしくご教授願います。

はじめまして ヤブと申します。

Oracle8 Workgroup Server for Linuxをマニュアル等を参考に環境変数も登録して
インストールしたのですが、最後の方で「
Relinking Error. The executables for Oracle8
Standard (RDBMS) were not made successfully.
Please check the log file (/u01/app/oracle/
product/8.0.5/orainst/install.log) and repeat
the installation procedure for Oracle8 Standard (RDBMS).
」のエラーが出て正常にインストールできません。
インストールログを見ても解決策が...続きを読む

Aベストアンサー

Oracle8は、RedHatLinux7.2に対応していません。

該当するエラーとしては、カーネルが2.2ではないことと、glibc2.1ではないのが原因かと思われます。(7.2は、カーネル2.4.7、glibc2.2.4)

で、glibc2.1を入れれば動くかというと、これはやってみないと分からないところです。(恐らくは無理だと思います)

QOracle8とOracle8iについて

サーバーにOralce8(8.0.5 nt)とOracle8i(8.1.7nt)があり
Oracle8の方のプログラムを作りたいのですが
Oracle8iのpro*cしか持っていません
このような場合oracle8用のpro*cを購入しないとだめでしょうか?
(ライセンスとか・・・)

Oralce8に接続するクライアントは今のままのバージョン(oracle8)を使用したいのですがOracle8クライアントのプログラムを8i用のpro*c8.1.7で作成できますか?
(このときはやっぱりクライアントは8iじゃないとだめでしょうか?)

回答、よろしくお願いします

Aベストアンサー

下位互換は無いようですね。
pro*c8.1.7ではOracle8i用のプログラムになってしまうようです。

取り扱い店に相談されるのが確実だと思いますがいかがでしょうか。


人気Q&Aランキング

おすすめ情報