<div dir="ltr">久保さん<div><br></div><div>成田です。</div><div><br></div><div>考察ありがとうございます。</div><div>ご指摘の通り、1については遅いものではありません。</div><div>1で絞り込んだものに対する2のSQLが遅い、が</div><div>課題となっています。</div><div><br></div><div>なおINSERTコストの考慮も確認しておりますが</div><div>通常のSELECTでも遅い状況です。(2について)</div><div><br></div><div>頂いた観点踏まえまして、SQLの改善、または</div><div>プロシージャなどによる対応の方針で</div><div>進める形にしようかと思います。</div><div>色々とご意見いただきありがとうございました。</div><div><br></div><div>一旦こちらをもってクローズいただければと思います。</div><div>※面白い結果がわかれば共有できればと思います。</div><div><br></div><div><br></div><div class="gmail_extra">以上、よろしくお願いいたします。</div><div class="gmail_extra">--</div><div><br></div><div class="gmail_extra"><div class="gmail_quote">2015å¹´7月30æ—¥ 22:12 kubo <span dir="ltr">&lt;<a href="mailto:dbflute@gmail.com" target="_blank">dbflute@gmail.com</a>&gt;</span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">久保(jflute)です<br>
<br>
なるほど、シングルDBとRACで違くて、<br>
待てば帰ってくるということで、<br>
処理は進んでて単に時間がかかっていることですね。<br>
<span class=""><br>
&gt; a:10秒以内に返ってくる条件、<br>
&gt; b:10分で返ってくる条件、<br>
&gt; c:30分以上返ってこない条件が確認できました。<br>
</span>&gt; â€¦<br>
&gt; &gt; å‡¦ç†é…延時間に関しては、実行時の条件句によって変わります。<br>
<br>
条件というのは、マテリアライズドビューの検索のことでしょうか?<br>
<span class="">2.INSERT TEMP_TABLE2 SELECT * FROM TEMP_TABLE1<br>
</span>が遅いという話だったので、<br>
1のビューの条件はあまり関係ないのかなと思ったのですが、<br>
1も遅いのでしょうか?<br>
(2は一時テーブルから一時テーブルのSQLなので、<br>
マテビューの条件が影響すると考えにくいかなと思いまして)<br>
<br>
もし、1も遅い (or ï¼‘の方が遅い) ã®ã§ã‚れば、<br>
単純に SELECT * FROM MV_USER ã™ã‚‹ã ã‘で遅いのかどうか、<br>
試したいところですね。<br>
<br>
&gt; どちらの環境においても、アプリからの実行と<br>
&gt; クライアントツールからの実行で、<br>
&gt; 大きく処理時間が違いました。<br>
<br>
こちら方向性での検証は、お約束の検証方法なのですが、<br>
フレームワークのDataSourceを使って、<br>
JDBCベタに実行してみるといいかと思います。<br>
外だしSQLの execute() ãƒ¡ã‚½ãƒƒãƒ‰ã‚‚、<br>
(execute()メソッドを使われていますよね?)<br>
単純にPreparedStatementのexecute()を呼んでいるだけなので、<br>
そこで差が出るとか考えにくいですが、<br>
原因ポイントの切り分けのために。<br>
<br>
&gt; å¤§å¹…に改修することは直近は難しいため、<br>
&gt; å½±éŸ¿ã®å°‘ない改修方法を探しております。<br>
<br>
原因追及が長引いたら回避策として、<br>
プロシージャを作ってアプリからはそれを実行するだけってのも<br>
アリかもしれません。それで速くなるかわかりませんが…<br>
(逆にそれでも遅いとなれば、アプリからのDB接続セッションに<br>
何かしらクライアントツールからの接続と違う点があるのかも)<br>
<div class="HOEnZb"><div class="h5"><br>
<br>
<br>
2015-07-30 21:15 GMT+09:00 Nari &lt;<a href="mailto:trickster.m.3@gmail.com">trickster.m.3@gmail.com</a>&gt;:<br>
&gt; ä¹…保さん<br>
&gt;<br>
&gt; ãŠä¸–話になっております。成田です。<br>
&gt; ã”確認ありがとうございます。<br>
&gt;<br>
&gt; é ‚いた件についてですが、以下ご参照いただけますか。<br>
&gt; ç’°å¢ƒãªã©æ¼ã‚Œã¦ã„た点もあり申し訳ありませんが、<br>
&gt; ãã®ç‚¹åŠ å‘³ã—ても状況は同様です。<br>
&gt; --------------------------------<br>
&gt; o ãã®SQLはDBFluteの外だしSQLを使って実行している?<br>
&gt; â†’使っています<br>
&gt;<br>
&gt;  o 30分待てば終わる? (or æ°¸é ã«çµ‚わりそうにない?)<br>
&gt; â†’スペックにより差異はありますが<br>
&gt;  ç’°å¢ƒã«ã‚ˆã£ã¦ã¯çµ‚わりそうにないとしています。<br>
&gt;  (長時間化する)<br>
&gt;<br>
&gt;  ãƒ‘フォーマンスの悪い環境(シングルDB)では、<br>
&gt;  a:10秒以内に返ってくる条件、<br>
&gt;  b:10分で返ってくる条件、<br>
&gt;  c:30分以上返ってこない条件が確認できました。<br>
&gt;<br>
&gt;  ãƒ‘フォーマンスのよい環境(RAC)では、<br>
&gt;  ä¸Šè¨˜ã¨åŒã˜æ¡ä»¶ã€SQLの場合でそれぞれ、<br>
&gt;  a:2秒で返ってくる、<br>
&gt;  b:20秒で返ってくる、<br>
&gt;  c:2分30秒で返ってくることが確認されました。<br>
&gt;<br>
&gt;  o ä½•åº¦å®Ÿè¡Œã—ても必ず遅い?<br>
&gt; â†’遅い<br>
&gt;<br>
&gt;  o ã©ã®ç’°å¢ƒã§ã‚‚再現する?<br>
&gt; â†’パフォーマンスがよい環境では、<br>
&gt;  20秒でレスポンスが返ってくることが確認されました。<br>
&gt;  ãŸã ã—、クライアントツールでは同様のDBに対して、<br>
&gt;  è©²å½“のSQLでデータを抽出するまで、<br>
&gt;  2秒で取得できることが確認されました。<br>
&gt;  ã©ã¡ã‚‰ã®ç’°å¢ƒã«ãŠã„ても、アプリからの実行と<br>
&gt;  ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãƒ„ールからの実行で、<br>
&gt;  å¤§ããå‡¦ç†æ™‚間が違いました。<br>
&gt;<br>
&gt;&gt;処理が遅いのか、ロック待ちしているのか、<br>
&gt;&gt;で全然解決方法が違うと思うので、<br>
&gt;&gt;とりあえずこのへんの情報を整理できるといいかと。<br>
&gt; ãƒ­ãƒƒã‚¯å¾…ちはない認識です。<br>
&gt; å˜ç´”にSQL発行を単独実施しているため。<br>
&gt; OracleのV$LOCK内には、常に実行しているSQLが1つだけ、<br>
&gt; æ»žç´ã—ていることを確認しております。<br>
&gt; å‡¦ç†é…延時間に関しては、実行時の条件句によって変わります。<br>
&gt;<br>
&gt;&gt;あと、1と2でトランザクションを分けるとどうなるか?<br>
&gt;&gt;とかの検証にしてみたいところですね。<br>
&gt; ï¼‘と2のトランザクションですが、一時テーブルを使っているため、<br>
&gt; åˆ†å‰²ã‚’することができません。<br>
&gt; å¤§å¹…に改修することは直近は難しいため、<br>
&gt; å½±éŸ¿ã®å°‘ない改修方法を探しております。<br>
&gt;<br>
&gt;<br>
&gt; ä»¥ä¸Šã€ã‚ˆã‚ã—くお願いいたします。<br>
&gt; --<br>
&gt;<br>
&gt; 2015å¹´7月30æ—¥ 15:51 kubo &lt;<a href="mailto:dbflute@gmail.com">dbflute@gmail.com</a>&gt;:<br>
&gt;&gt;<br>
&gt;&gt; ä¹…保(jflute)です<br>
&gt;&gt;<br>
&gt;&gt; æˆç”°ã•ã‚“、こんにちは<br>
&gt;&gt;<br>
&gt;&gt; è‰²ã€…と登場人物が多いので、<br>
&gt;&gt; ã¾ãšã¯ã¡ã‚‡ã£ã¨çŠ¶æ³ã®æ•´ç†ã‹ã‚‰ã§ãã‚Œã°ã¨ã€‚<br>
&gt;&gt;<br>
&gt;&gt; &gt; ï¼’.INSERT TEMP_TABLE2 SELECT * FROM TEMP_TABLE1 ;(※)<br>
&gt;&gt; &gt;    (処理件数123391件)<br>
&gt;&gt;<br>
&gt;&gt; ã“のSQLを、アプリケーションの中から、<br>
&gt;&gt; å®Ÿè¡Œã—たら30分かかったということでしょうか?<br>
&gt;&gt;  o ãã®SQLはDBFluteの外だしSQLを使って実行している?<br>
&gt;&gt;  o 30分待てば終わる? (or æ°¸é ã«çµ‚わりそうにない?)<br>
&gt;&gt;  o ä½•åº¦å®Ÿè¡Œã—ても必ず遅い?<br>
&gt;&gt;  o ã©ã®ç’°å¢ƒã§ã‚‚再現する?<br>
&gt;&gt;<br>
&gt;&gt; å‡¦ç†ãŒé…いのか、ロック待ちしているのか、<br>
&gt;&gt; ã§å…¨ç„¶è§£æ±ºæ–¹æ³•ãŒé•ã†ã¨æ€ã†ã®ã§ã€<br>
&gt;&gt; ã¨ã‚Šã‚えずこのへんの情報を整理できるといいかと。<br>
&gt;&gt;<br>
&gt;&gt; ã‚と、1と2でトランザクションを分けるとどうなるか?<br>
&gt;&gt; ã¨ã‹ã®æ¤œè¨¼ã«ã—てみたいところですね。<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; 2015-07-30 15:00 GMT+09:00 Nari &lt;<a href="mailto:trickster.m.3@gmail.com">trickster.m.3@gmail.com</a>&gt;:<br>
&gt;&gt; &gt; ãŠä¸–話になります。成田と申します。<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; ä»¥å‰ã¯OracleのLikeSearchの件でお世話になりました。<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; ä»Šå›žã€dbfluteを利用しているアプリにて<br>
&gt;&gt; &gt; æ°—になる事象がありましたので<br>
&gt;&gt; &gt; ä½•ã‹çŸ¥è¦‹ã‚りましたらご教授いただけますと幸いです。<br>
&gt;&gt; &gt; ------------------------------------------------------------------------<br>
&gt;&gt; &gt; â– ç’°å¢ƒ<br>
&gt;&gt; &gt;  java:jdk1.7.0_51<br>
&gt;&gt; &gt;  tomcat:7.0<br>
&gt;&gt; &gt;  framework:Spring Framework 3.2.8.RELEASE<br>
&gt;&gt; &gt;  DB:Oracle Database 11g Release 11.2.0.3.0 - 64bit Production<br>
&gt;&gt; &gt;  O/Rマッパー:dbflute<br>
&gt;&gt; &gt;  jdbc:ojdbc7-12.1.0.1.0.jar<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; â– æ¦‚要<br>
&gt;&gt; &gt;  Webアプリケーション上の一部の処理で、<br>
&gt;&gt; &gt;  ãƒ‘フォーマンスが極端に悪い事象が確認されました。<br>
&gt;&gt; &gt;  è©²å½“の処理は、1度のSQLで実行すると非常に動作が遅いため、<br>
&gt;&gt; &gt;  ä¸€æ™‚テーブルを利用し、<br>
&gt;&gt; &gt;  ã„くつかの処理に分解して実行しています。<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; â– äº‹è±¡<br>
&gt;&gt; &gt;  åŒä¸€Transaction内で、OracleのGLOBAL TEMPORARY TABLEを利用し、<br>
&gt;&gt; &gt;  ä»¥ä¸‹ã®ã‚ˆã†ãªå‡¦ç†ã‚’しております。<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; ------------------------------------------------<br>
&gt;&gt; &gt;  ï¼‘.INSERT TEMP_TABLE1 SELECT * FROM MV_USER ;(※)<br>
&gt;&gt; &gt;    (処理件数143170件)<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;  ï¼’.INSERT TEMP_TABLE2 SELECT * FROM TEMP_TABLE1 ;(※)<br>
&gt;&gt; &gt;    (処理件数123391件)<br>
&gt;&gt; &gt;  ãƒ»ãƒ»ãƒ»ãƒ»ãƒ»ãƒ»<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;  â€»å„テーブル名は以下の表またはビューとなります。<br>
&gt;&gt; &gt;   TEMP_TABLE1:GLOBAL TEMPORARY TABLE<br>
&gt;&gt; &gt;   TEMP_TABLE2:GLOBAL TEMPORARY TABLE<br>
&gt;&gt; &gt;   MV_USER:MATERIALIZED VIEW<br>
&gt;&gt; &gt; ------------------------------------------------<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;  ä¸Šè¨˜ã®å ´åˆã€ã‚¢ãƒ—リケーションから2のSQLを実行した所、<br>
&gt;&gt; &gt;  ãƒ‘フォーマンスが悪くDBに滞納が確認されました。<br>
&gt;&gt; &gt;  sys権限でV$LOCK内のロック時間を確認すると<br>
&gt;&gt; &gt;  30分以上、滞納していることが確認できました。<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;  ä¸€æ–¹ã€åŒæ§˜ã®SQLã‚’Oracleのクライアントツール(Osqledit:odbc)ã‚’<br>
&gt;&gt; &gt;  ç”¨ã„て実行すると、約2秒ほどで1、2のSQLを実施できました。<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; â– è£œè¶³<br>
&gt;&gt; &gt;  jdbc、odbcによる影響もあるかとしツールでの差異を確認しましたが<br>
&gt;&gt; &gt;  SQLDeveloper(jdbc)でも処理が早いことを確認しております。<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; æœ¬ä»¶ã®åŽŸå› ã€ç†ç”±ãŒç‰¹å®šã§ãã¦ã„ないため、<br>
&gt;&gt; &gt; éŽåŽ»ã®äº‹ä¾‹ã‚„、どういった原因が考えられるか<br>
&gt;&gt; &gt; ã‚¢ãƒ‰ãƒã‚¤ã‚¹ã‚’頂けますでしょうか。<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; ä»¥ä¸Šã€ã‚ˆã‚ã—くお願いいたします。<br>
&gt;&gt; &gt; --<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; _______________________________________________<br>
&gt;&gt; &gt; Seasar-user mailing list<br>
&gt;&gt; &gt; <a href="mailto:Seasar-user@ml.seasar.org">Seasar-user@ml.seasar.org</a><br>
&gt;&gt; &gt; <a href="https://ml.seasar.org/mailman/listinfo/seasar-user" rel="noreferrer" target="_blank">https://ml.seasar.org/mailman/listinfo/seasar-user</a><br>
&gt;&gt; &gt;<br>
&gt;&gt; _______________________________________________<br>
&gt;&gt; Seasar-user mailing list<br>
&gt;&gt; <a href="mailto:Seasar-user@ml.seasar.org">Seasar-user@ml.seasar.org</a><br>
&gt;&gt; <a href="https://ml.seasar.org/mailman/listinfo/seasar-user" rel="noreferrer" target="_blank">https://ml.seasar.org/mailman/listinfo/seasar-user</a><br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; _______________________________________________<br>
&gt; Seasar-user mailing list<br>
&gt; <a href="mailto:Seasar-user@ml.seasar.org">Seasar-user@ml.seasar.org</a><br>
&gt; <a href="https://ml.seasar.org/mailman/listinfo/seasar-user" rel="noreferrer" target="_blank">https://ml.seasar.org/mailman/listinfo/seasar-user</a><br>
&gt;<br>
_______________________________________________<br>
Seasar-user mailing list<br>
<a href="mailto:Seasar-user@ml.seasar.org">Seasar-user@ml.seasar.org</a><br>
<a href="https://ml.seasar.org/mailman/listinfo/seasar-user" rel="noreferrer" target="_blank">https://ml.seasar.org/mailman/listinfo/seasar-user</a><br>
</div></div></blockquote></div><br></div></div>