[pgcluster: 16] Re: クラスタサーバの復旧がうまくいきません
Takegami, Takashi
takegami @ isp.co.jp
2004年 1月 8日 (木) 14:54:45 JST
竹上と申します。
■update後のselectについて、私もその後調査いたしました。
[再確認]
- 更新系トランザクションには、「begin」を用いず「set autocommit
=off」を用いています。
- 更新系トランザクションの終了は、commitをし、その後「set
autocommit=on」をしています。
- 更新系トランザクションの終了後、select文を実行しますと、レプリケ
ータサーバのデバッグログの出力を見ると「cmdSts = T」となってお
ります。
- 以上の確認は、Javaコードを書きJDBCを用いてDBに接続しました。
[手動での確認]
- 私も手動でpsqlを試してみました。
1. DB=# select 1; ->レプリケートされない。
2. DB=# set autocommit = off; ->レプリケートされる。
3. DB=# select 1; ->レプリケートされる。
4. DB=# commit; ->レプリケートされる。
5. DB=# set autocommit = on; ->レプリケートされる。
6. DB=# select 1; ->レプリケートされる。
でした。
[./src/backend/libpq/replicate.c を一部変更しての確認]
- 下記の変更をしてみたところ、update後のselect文はレプリケート
されませんでした。
- 上記ファイルの1106行のところ
「変更前」
if ((cmdType == CMD_TYPE_COMMIT ) ||
(cmdType == CMD_TYPE_ROLLBACK ))
{
「変更後」
if ((cmdType == CMD_TYPE_COMMIT ) ||
(cmdType == CMD_TYPE_ROLLBACK ) ||
(autocommit == true ))
{
- 上記の変更にて対処してよいのでしょうか?
以上です。よろしくお願い致します。
ps 早速のお返事ありがとうございました。> mitani様。
At 04/01/08 13:51, you wrote:
>谷田です。
>
>On Wed, 07 Jan 2004 17:44:03 +0900
>"Takegami, Takashi" <takegami @ isp.co.jp> wrote:
>
>
> > ■上記の2点に関係すると思われる状況
> >
> > - 更新系の処理(insert, update)が一度行われた後は、参照系の処理(sele
> > ct)もレプリケートされている現象を確認しました。
> >
> > 【確認項目】
> > - レプリケータをデバックモードで起動して出力されるログにて確認。
> > - 更新系の処理が行われる前は、参照系の処理はレプリケータのログに
> > 出力されません。
> > - 更新系の処理が行われると、その後は、同じ参照系の処理もレプリケ
> > ータのログに出力されました。
> > - 更新系の処理は、トランザクションを発行しており、必ずcommitもし
> > くはrollbackしています。
> > - 参照系の処理は、トランザクションを発行していません。autocommit
> > モードはONにしています。
> > - DBへのコネクションはプーリングしています。毎回の接続/切断はして
> > いません。
>
>これについて追試を行ってみたのですが、手元でpsql等を使ってみても再現しま
>せん。以下のような方法であっていたでしょうか?
>
>・接続する
>・とりあえずselect -> レプリケーションされない -> ○
>・更新系トランザクション -> レプリケーションされる -> ○
>・さらにselect -> レプリケーションされる -> ×
>
>--
>TANIDA Yutaka <tanida @ sra.co.jp>
>
---
From; Takegami, Takashi
E_mail; takegami @ isp.co.jp
pgcluster メーリングリストの案内