[pgpool-general-jp: 448] pgpoolからのreindexdb, vacuumdbの実行

Masao Yano yano @ magazine.co.jp
2008年 6月 6日 (金) 12:02:58 JST


こんにちは、矢野といいます。初めて投稿します。

pgpool-II-2.2.1beta2(サーバA)と、postgres-8.2.4を2台のサーバ(サーバ
B, C)に乗せて、レプリケーションモードで運用をしています。OSは3台とも
RedHat EL5です。

先日、縮退(サーバCを切り離し)が起きたので調べていたら縮退の原因は

2008-06-05 11:40:24 LOG:   pid 19489: statement: EXPLAIN select * from shikyu where shikyudate='2008-06-10'

でした。実際サーバB, Cそれぞれで上記SQLを実行してみたところ、

[サーバB]
db=# EXPLAIN select * from shikyu where shikyudate='2008-06-10';
                                   QUERY PLAN                                    
---------------------------------------------------------------------------------
 Index Scan using shikyu_pkey on shikyu  (cost=0.00..3274.85 rows=392 width=902)
   Index Cond: (shikyudate = '2008-06-10'::date)
(2 rows)

db=# 


[サーバC]
db=# EXPLAIN select * from shikyu where shikyudate='2008-06-10';
                                  QUERY PLAN                                   
-------------------------------------------------------------------------------
 Bitmap Heap Scan on shikyu  (cost=2052.11..3240.76 rows=389 width=898)
   Recheck Cond: (shikyudate = '2008-06-10'::date)
   ->  Bitmap Index Scan on shikyu_pkey  (cost=0.00..2052.01 rows=389 width=0)
         Index Cond: (shikyudate = '2008-06-10'::date)
(4 rows)

db=# 

と出力が異なりました。pgpoolでサーバCをリカバーしてサーバB, Cそれぞれ
で上記EXPLAINを実行したら、どちらも上記サーバBと同じ出力となりました。

その後、思い立って、毎朝サーバA上でバッチで実行している

/usr/local/pgsql/bin/reindexdb -s; /usr/local/pgsql/bin/reindexdb -a; /usr/local/pgsql/bin/vacuumdb -a -z

を実行し、上記SQLをサーバB, Cで実行したところ、縮退発生時のように出力
の不一致が再現しました。この状態でサーバA上で上記EXPLAINを実行すると当
然のことながら縮退が発生しました。

再度pgpoolでリカバーして、今度は上記reindexdb, vacuumdbをサーバAではな
く、サーバB, Cそれぞれで実行し、EXPLAINを実行したところ、サーバB, Cと
もに

db=# EXPLAIN select * from shikyu where shikyudate='2008-06-10';
                                  QUERY PLAN                                   
-------------------------------------------------------------------------------
 Bitmap Heap Scan on shikyu  (cost=2040.11..3220.93 rows=385 width=811)
   Recheck Cond: (shikyudate = '2008-06-10'::date)
   ->  Bitmap Index Scan on shikyu_pkey  (cost=0.00..2040.01 rows=385 width=0)
         Index Cond: (shikyudate = '2008-06-10'::date)
(4 rows)

db=# 

と出力が一致し、サーバAで実行しても縮退しなくなりました。

この間、テーブル定義などには変更を加えていません。

以上のことから、reindexdb, vacuumdbをpgpoolから実行すると結果が不一致
する、というように思われますが、このようなことは起こりうるのでしょうか。

近々postgresを8.3.1にバージョンアップするので、autovacuumを使うように
なったらそもそもこの問題は発生しなくなるんですが、どうも気になるので投
稿しました。ご意見お聞かせいただければと思います。よろしくお願いします。

------------------------------
(株)マガジンハウス 
      情報システム部 矢野 政男
      TEL: 03-3545-7124



pgpool-general-jp メーリングリストの案内