[pgsql-jp: 29671] pg_dumpとpg_restoreのレコード数不一致
Takaharu Ogawa
ogax @ pop02.odn.ne.jp
2003年 4月 18日 (金) 18:42:19 JST
OGAXと申します。いつもお世話になります。
pg_dumpとpg_restoreで性能測定をしていたところ、不可解な現象が
発生しました。
pg_dump実行時のレコード件数と、pg_restore後のレコード件数が
一致しないのです。
=実行したコマンドの内容=
$ cat test3.sh
createdb test
time pgbench -i -s 60 test
psql -d test -c 'select count(*) from accounts;'
time pg_dump -C -Fc test > test60.dump
dropdb test
time pg_restore -C -d template1 test60.dump
psql -d test -c 'select count(*) from accounts;'
=============
pgbenchのスケーリングファクタ(-sオプション)が20(200万レコード)までは
良いのですが、30,40,50,60で実験すると合致しません。
#pg_dumpで-dオプション(COPYではなくINSERT文にする)を付けた場合は
#問題ないようです。
#pg_dumpで-Fcオプションを指定しているので、pg_dumpしたファイル内の
#レコード数は確認できていません。
pg_dumpで-dオプションなしのダンプ・リストアは信頼性がないのでしょうか?
-dオプションを付けると、pg_restoreの所要時間が下記例の37分に対し、8時間
も掛かってしまうので、できれば-dなしにしたかったのですが...
PGDATAのディレクトリをNFS上に置いているのが原因なのかなとも考えています。
皆さん、ダンプ・リストアはどのようにされていますか?
【実行環境】
$ uname -srv
SunOS 5.8 Generic_108528-18
$ pg_config --version
PostgreSQL 7.2.3
$ pg_config --configure
--prefix=/usr/local/pgsql --enable-multibyte=EUC_JP --enable-syslog
以下、実行した時のログです。
---------------
$ test3.sh
CREATE DATABASE
creating tables...
10000 tuples done.
20000 tuples done.
(省略)
5990000 tuples done.
6000000 tuples done.
vacuum...done.
real 58:46.9
user 23.9
sys 1.5
count
---------
6000000
(1 row)
real 9:36.1
user 2:34.6
sys 5.6
DROP DATABASE
real 36:55.6
user 59.1
sys 8.2
count
---------
5999884 <- ここ
(1 row)
$
---------------
pgsql-jp メーリングリストの案内