[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 メーリングリストの案内