[pgpool-general-jp: 124] Re: pgpool3.2+JDBC環境でのreplication_strictの挙動について
Yoshiyuki Asaba
y-asaba @ sraoss.co.jp
2007年 5月 7日 (月) 17:39:54 JST
浅羽です。
From: tutui-t @ sys.tosho.co.jp
Subject: [pgpool-general-jp: 123] Re: pgpool3.2+JDBC環境でのreplication_strictの挙動について
Date: Mon, 07 May 2007 15:04:03 +0900
> > 同じような再現プログラムを書いて動かしてみましたが、手元の環境では結果
> > が返ってきてからセカンダリに送っていました。もしデバッグログが残ってい
> > ましたらいただけないでしょうか?
> >
> > また、接続する際に以下のように loglevel を 2 にしていただけますでしょ
> > うか?JDBC ドライバのデバッグログを取得することができます。
>
> 先ほど、テストした結果をお送りします(少し長くなります)。
ありがとうございます。
> パケットのやり取り順序は前と変わりありませんでした。
> 今回は以下のように実行しています。
> connection.setAutoCommit(false);
> stmt = connection.createStatement();
> stmt.executeUpdate("LOCK test_data;");
> stmt.executeUpdate("UPDATE 〜");
> connection.commit();
>
>
>
> pgpoolのデバッグログです。
> ---------------------------------------------------------------
省略
> May 7 14:25:25 test_host pgpool: 2007-05-07 14:25:25 DEBUG: pid 9737:
> read kind from frontend E(45)
> May 7 14:25:25 test_host pgpool: 2007-05-07 14:25:25 DEBUG: pid 9737:
> Execute: portal name <>
> May 7 14:25:25 test_host pgpool: 2007-05-07 14:25:25 DEBUG: pid 9737:
> waiting for backend completing the query
> May 7 14:25:25 test_host pgpool: 2007-05-07 14:25:25 DEBUG: pid 9737:
> waiting for backend completing the query
ログを見た限りではマスタからの結果を待っているようです。
> JDBCのデバッグログです。
こちらも拝見しましたが、手元の環境と同じように出力されています。
テストスクリプトを作ったので、もし可能であれば添付したスクリプトを実行
しても止まるかご確認いただけないでしょうか?手元ではデータの整合性がく
ずれることなく終了しました。
実行する前にあらかじめ、
CREATE TABLE up(a int);
INSERT INTO up VALUES (1);
を実行しておき、以下の手順で実施することができます。
% vi Update.java <- 接続先などを適当に変更してください
% javac Update.java
% ./run.sh 5(同時接続数を指定)
--
Yoshiyuki Asaba
y-asaba @ sraoss.co.jp
-------------- next part --------------
import java.sql.*;
public class Update {
static String url = "jdbc:postgresql://localhost:9999/x?loglevel=2&preparedThreshold=1";
static String user = "y-asaba";
static String password = "";
public static void main(String[] args) throws SQLException, java.io.UnsupportedEncodingException {
int N = 1000;
try {
Class.forName("org.postgresql.Driver");
} catch (ClassNotFoundException e) {
}
for (int i = 0; i < N; i++) {
Connection con =
DriverManager.getConnection(url, user, password);
try {
con.setAutoCommit(false);
Statement stmt = null;
stmt = con.createStatement();
stmt.executeUpdate("LOCK TABLE up" );
stmt.executeUpdate("UPDATE up SET a = a + 1" );
stmt.close();
con.commit();
}
finally {
con.close();
}
}
}
}
-------------- next part --------------
N=${1-5}
count=0
while ([ $count -lt $N ])
do
java Update &
count=`expr $count + 1`
done
wait
echo $count
pgpool-general-jp メーリングリストの案内