[pgsql-jp: 41460] Re: AutoCommitをfalseにするとレスポンスが遅くなる
MauMau
maumau307 @ gmail.com
2013年 7月 23日 (火) 22:15:37 JST
MauMauといいます。
問い合わせ計画は自動コミットが有効かどうかによって変わらないように思うのですが、次のことを教えてください。
Q1 SQL分の実行には、StatementとPreparedStatementのどちらを使ったでしょうか。
Q2 setAutoCommit()で自動コミットを有効/無効にしたそれぞれの場合で、まったく同じSQL分を実行されているでしょうか。
同じとは、WHERE句などで指定する定数や、PreparedStatement#setXXX()で
設定する値も完全に一致する、ということです。
Q3 それぞれの場合において、テーブル内のデータや統計情報に違いはなかったでしょうか。
以上です。
----- Original Message -----
From: <pascalpascal @ snow.plala.or.jp>
To: <pgsql-jp @ ml.postgresql.jp>
Sent: Tuesday, July 23, 2013 5:29 PM
Subject: [pgsql-jp: 41453] AutoCommitをfalseにするとレスポンスが遅くなる
> 宮本と申します。
>
> 現在、PostgreSQL(9.1.6)を運用しております。
>
> jdbc経由でPostgresqlに接続して、selectを実行するJavaのプログラムで
> レスポンスが遅いという現象があり、調査したところ、
> AutoCommitをfalseにすると、遅いということがわかりました。
>
> AutoCommitをfalseにすると実行計画も違います。長いSQL文で結合が多く、
> データ件数も多いため、Hash joinを使った方が早いのですが、
> AutoCommitをfalseにすると、なぜか、Nested Loopが使われてしまいます。
>
> AutoCommit レスポンス 実行計画
> ---------------------------------------------
> false 遅い(約3分) Nested loop
> true 早い(約6秒) Hash join
>
> 環境
> OS: Redhat Enterprise Linux 5.7
> PostgreSQL: 9.1.6
> jdbc: postgresql-9.1-901.jdbc3.jar
> (jdbcをpostgresql-9.1-903.jdbc3.jarやpostgresql-9.2-1003.jdbc3.jarにしても同じでした。)
>
> これは仕様なのでしょうか。
> それともバグなのでしょうか。
> ネット上でいろいろ調べましたが、わかりませんでした。
> どなたか情報をお持ちの方は教えていただけないでしょうか。
> よろしくお願いします。
>
pgsql-jp メーリングリストの案内