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