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

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


※一部、訂正して再送します。すみません。

mlusさん、朝倉さん、笠原さん、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 メーリングリストの案内