<div dir="ltr">お世話になります。成田と申します。<div><br></div><div>以前はOracleのLikeSearchの件でお世話になりました。</div><div><br></div><div>今回、dbfluteを利用しているアプリにて</div><div>気になる事象がありましたので</div><div>何か知見ありましたらご教授いただけますと幸いです。</div><div>------------------------------------------------------------------------</div><div><div>■環境</div><div> java:jdk1.7.0_51</div><div> tomcat:7.0</div><div> framework:Spring Framework 3.2.8.RELEASE</div><div> DB:Oracle Database 11g Release 11.2.0.3.0 - 64bit Production</div><div> O/Rマッパー:dbflute</div><div> jdbc:ojdbc7-12.1.0.1.0.jar</div></div><div><br></div><div><div>■概要</div><div> Webアプリケーション上の一部の処理で、</div><div> パフォーマンスが極端に悪い事象が確認されました。</div><div> 該当の処理は、1度のSQLで実行すると非常に動作が遅いため、</div><div> 一時テーブルを利用し、</div><div> いくつかの処理に分解して実行しています。</div></div><div><br></div><div><div>■事象<br></div><div> 同一Transaction内で、OracleのGLOBAL TEMPORARY TABLEを利用し、</div><div> 以下のような処理をしております。</div><div><br></div><div>------------------------------------------------</div><div> 1.INSERT TEMP_TABLE1 SELECT * FROM MV_USER ;(※)</div><div>   (処理件数143170件)</div><div><br></div><div> 2.INSERT TEMP_TABLE2 SELECT * FROM TEMP_TABLE1 ;(※)</div><div>   (処理件数123391件)</div><div> ・・・・・・</div><div><br></div><div> ※各テーブル名は以下の表またはビューとなります。</div><div>  TEMP_TABLE1:GLOBAL TEMPORARY TABLE</div><div>  TEMP_TABLE2:GLOBAL TEMPORARY TABLE</div><div>  MV_USER:MATERIALIZED VIEW</div><div>------------------------------------------------</div><div><br></div><div> 上記の場合、アプリケーションから2のSQLを実行した所、</div><div> パフォーマンスが悪くDBに滞納が確認されました。</div><div> sys権限でV$LOCK内のロック時間を確認すると</div><div> 30分以上、滞納していることが確認できました。</div><div> </div><div> 一方、同様のSQLをOracleのクライアントツール(Osqledit:odbc)を</div><div> 用いて実行すると、約2秒ほどで1、2のSQLを実施できました。</div><div><br></div><div>■補足</div><div> jdbc、odbcによる影響もあるかとしツールでの差異を確認しましたが</div><div> SQLDeveloper(jdbc)でも処理が早いことを確認しております。</div><div><br></div><div>本件の原因、理由が特定できていないため、</div><div>過去の事例や、どういった原因が考えられるか</div><div>アドバイスを頂けますでしょうか。</div></div><div><br></div><div><br></div><div>以上、よろしくお願いいたします。</div><div>--</div></div>