[pgpool-general-jp: 1209] BEGIN TRANSACTION がすべてのノードに送られない他
Kensuke Takahashi
kensuke.takahashi @ ctc-g.co.jp
2013年 10月 22日 (火) 10:55:22 JST
みなさまへ
お世話になっております。CTC 高橋です。
表題の件につきまして質問をお送り致します。
使用しているバージョンは下記となります。
※ ご質問は3点ございます。
■ pgpool-II-3.3.1.tar.gz
★ 下記についての動作確認となります。
http://www.pgpool.net/docs/latest/pgpool-ja.html
-----
マスタ・スレーブモードでの BEGIN TRANSACTION の扱いを修正しました。(Tatsuo Ishii)
これは [pgpool-general: 714] で報告されました。
3.1 以降、BEGIN TRANSACTION をすべてのノードに送るようにしました。 PostgreSQL の仕様では、スタンバイノードには BEGIN TRANSACTION READ WRITE を送ることはできませんが、 BEGIN WORK ISOLATION LEVEL
SERIALIZABLE についてチェックしておらず、スタンバイノードに送信していました。 もちろんこれは誤りで、スタンバイノードが SERIALIZABLE モードになることは許されていません。
そのため、BEGIN WORK ISOLATION LEVEL SERIALIZABLE をチェックするようにしました。
Subject: [pgpool-general: 714] Load Balancing / Streaming Replication / Isolation Level serializable
From: Philip Hofstetter
Date: Wed, 11 Jul 2012 17:04:26 +0200
-----
★ お聞きしたいこと1
begin;
のみを発行した場合にはBEGIN TRANSACTION がすべてのノードに送信されますが、
begin;select 〜;
を発行した場合には BEGIN TRANSACTION は Masterノードのみにしか送信されません。
※ 本現象は仕様となりますでしょうか。
# MasterDB
----
Oct 22 10:41:39 MasterDB postgres[43156]: [6-1] [43156][192.168.248.71(58193)]LOG: statement: begin;select 1;
Oct 22 10:42:01 MasterDB postgres[43156]: [7-1] [43156][192.168.248.71(58193)]LOG: statement: savepoint _SVP_6789;
----
# Slave
----
Oct 22 10:42:01 SlaveDB postgres[29232]: [2-1] [29232][192.168.248.71(55162)]LOG: statement: savepoint _SVP_6789;
Oct 22 10:42:01 SlaveDB postgres[29232]: [3-1] [29232][192.168.248.71(55162)]ERROR: SAVEPOINT can only be used in transaction blocks
Oct 22 10:42:01 SlaveDB postgres[29232]: [3-2] [29232][192.168.248.71(55162)]STATEMENT: savepoint _SVP_6789;
----
★ お聞きしたいこと2
「お聞きしたいこと1」の現象は、unixODBC接続を使用した場合に発生しており、
現象を改善する方法としては、下記ソースの改修が必要となってしまします。
psqlodbc-09.02.0100.tar.gz
改修方法としては、psqlodbc-09.02.0100/connection.c の CC_send_query_append を実行しないように
改修するなどです。
※ 本現象を pgpool-II側で回避する方法がございますでしょうか。
もし、psqlodbc 側で回避する方法があれば合わせてお教え頂ければと存じます。
★ お聞きしたいこと3
※ load_balance_mode = on の場合のとなります。
select version()
が発行された場合、select分のLBが実行されませんがLBされるようにする方法はありませんでしょうか。
※ 本件は下記に設定することで select version() を発行させなくする回避策がございますので、
もしございましたらお教え頂ければと思います
odbc.ini
--- 回避方法抜粋 ---
Protocol=7.4
-----------------
以上、よろしくお願い申し上げます。
pgpool-general-jp メーリングリストの案内