[Seasar-user:22075] 実行環境によるSQL処理の差異について

Nari [E-MAIL ADDRESS DELETED]
2015年 7月 30日 (木) 15:00:36 JST


お世話になります。成田と申します。

以前はOracleのLikeSearchの件でお世話になりました。

今回、dbfluteを利用しているアプリにて
気になる事象がありましたので
何か知見ありましたらご教授いただけますと幸いです。
------------------------------------------------------------------------
■環境
java:jdk1.7.0_51
tomcat:7.0
framework:Spring Framework 3.2.8.RELEASE
DB:Oracle Database 11g Release 11.2.0.3.0 - 64bit Production
O/Rマッパー:dbflute
jdbc:ojdbc7-12.1.0.1.0.jar

■概要
Webアプリケーション上の一部の処理で、
パフォーマンスが極端に悪い事象が確認されました。
該当の処理は、1度のSQLで実行すると非常に動作が遅いため、
一時テーブルを利用し、
いくつかの処理に分解して実行しています。

■事象
同一Transaction内で、OracleのGLOBAL TEMPORARY TABLEを利用し、
以下のような処理をしております。

------------------------------------------------
1.INSERT TEMP_TABLE1 SELECT * FROM MV_USER ;(※)
(処理件数143170件)

2.INSERT TEMP_TABLE2 SELECT * FROM TEMP_TABLE1 ;(※)
(処理件数123391件)
・・・・・・

※各テーブル名は以下の表またはビューとなります。
TEMP_TABLE1:GLOBAL TEMPORARY TABLE
TEMP_TABLE2:GLOBAL TEMPORARY TABLE
MV_USER:MATERIALIZED VIEW
------------------------------------------------

上記の場合、アプリケーションから2のSQLを実行した所、
パフォーマンスが悪くDBに滞納が確認されました。
sys権限でV$LOCK内のロック時間を確認すると
30分以上、滞納していることが確認できました。
 一方、同様のSQLをOracleのクライアントツール(Osqledit:odbc)を
用いて実行すると、約2秒ほどで1、2のSQLを実施できました。

■補足
jdbc、odbcによる影響もあるかとしツールでの差異を確認しましたが
SQLDeveloper(jdbc)でも処理が早いことを確認しております。

本件の原因、理由が特定できていないため、
過去の事例や、どういった原因が考えられるか
アドバイスを頂けますでしょうか。


以上、よろしくお願いいたします。
--
-------------- next part --------------
HTML$B$NE:IU%U%!%$%k$rJ]4I$7$^$7$?(B...
URL: <http://ml.seasar.org/archives/seasar-user/attachments/20150730/8d7b3038/attachment.html>


Seasar-user メーリングリストの案内