[pgsql-jp: 41481] Re: AutoCommitをfalseにするとレスポンスが遅くなる

pascalpascal @ snow.plala.or.jp pascalpascal @ snow.plala.or.jp
2013年 7月 26日 (金) 12:15:50 JST


朝倉さん、笠原さん、MauMauさん、mlusさん

宮本です。

みなさん、ありがとうございます。
朝倉さんからご指摘いただいたように、st.setFetchSize(1000) を
なくしたところ・・・・
実行計画にHash joinが使用され、早くなりました!!!

ログの出力は、
execute <unnamed>: SELECT COUNT(*) FROM ・・・
のように、unnamedに変わっていました。

本当にありがとうございました。助かりました。

ちなみに、setFetchSizeの値をいろいろ変えてみたところ、
0だけは早く終わりました。

setFetchSize(1000) → 遅い(約3分)
setFetchSize(100) → 遅い(約3分)
setFetchSize(10) → 遅い(約3分)
setFetchSize(1) → 遅い(約3分)
setFetchSize(0) → 早い(約6秒)

setFetchSize(1000)にしていたのは、別のSQLでレスポンスが
遅かったときにこれで解決したので、他のプログラムでも
何となく共通的に入れていたのですが、これが原因とは、
思ってもみませんでした。


---- "朝倉 佑貴" <asakura.yuuki @ nttcom.co.jp> さんは書きました: 
> 朝倉と申します。
> 間違っていたらすいません。
> 
> FetchSizeの設定が入っているんですよね?
> FetchSizeは、AutoCommitがfalseのときだけ、
> 有効に働きます。
> 
> FetchSizeを指定する→CURSORが使われるということで、
> cursor_tuple_franctionで指定した割合のレコードを取得するまでの
> 時間が最短になるように実行計画が選択されます。
> 
> これで、CURSORの有効/無効の違いで、AutoCommitの
> 違いにより実行計画が異なることの説明がつきそうな気が
> しますが、いかがでしょうか。
> 
> 
> 
> 
> 
> 
> (2013/07/25 20:52), mlus wrote:
> > またまた関係ないかもしれませんが・・・・
> >
> >
> >>                         conn.setAutoCommit(false);
> >>
> >>                         String sql = "SELECT COUNT(*) FROM ( SELECT ・・・省略
> >>
> >>                         PreparedStatement st = conn.prepareStatement(sql);
> >
> >>                         st.setFetchSize(1000);
> > これ、なくしてみたらどうですかね?
> >                            // st.setFetchSize(1000);
> >
> >>                         st.setObject(1, "00060000");
> >>                         st.setObject(2, "00060000");
> >
> > あと、
> >
> > PreparedStatement prepareStatement(String sql,
> >                                    int resultSetType,
> >                                    int resultSetConcurrency) prepareStatement
> >
> > こっちのほう使って、一方通行カーソルと、readonly指定 とか・・・。 関係なかったらすいません。
> >
> >
> 
> -- 
> ----------------------------------------------------
>  NTTコムウェア株式会社
>   品質生産性技術本部 技術SE部
>   基盤ソフトSE・OSS部門  OSS・DB技術担当
> 
>    朝倉 佑貴(asakura.yuuki @ nttcom.co.jp)
> 
>  〒261-0023 千葉県千葉市美浜区中瀬1-6
>   NTT幕張ビル 21F-EN
>  TEL:043-211-2318 (内線:26-8239) 
> ----------------------------------------------------
> 



pgsql-jp メーリングリストの案内