[pgsql-jp: 36436] Re: vacuumdb時にWARNINGが発生

naruse @ daikodenshi.co.jp naruse @ daikodenshi.co.jp
2005年 11月 22日 (火) 13:35:00 JST


成瀬です。

岡野様、永安様>
さっそくマニュアルを読んでみました。
なかなか難しい内容で理解するのに時間がかかりましたが^^;

確かに今回の業務ではかなり頻繁にDBの更新/削除が発生しておりますので、
早速今後はcronに仕込んで毎日vaccumdb -a -f -zするように運用変更したいと思います
。
とても助かりました。ありがとうございました。


2005/11/22 12:23, Satoshi Nagayasu <nagayasus @ nttdata.co.jp> wrote:
>
> 永安です。
>
> naruse @ daikodenshi.co.jp wrote:
> > おっしゃるとおり、vacuumdb -a -zを実行した結果、WARNINGが発生しなくなり
> ました
> > 大変ありがとうございました。
> > 以前の状態では結果的にDBのフラグメントは解消できていなかったのでしょ
> うか?
>
> フラグメントは解消されています。
>
> VACUUMでは、大きく分けて二つの処理を行っています。
>
> 1.) テーブルファイルの断片化の解消
> 2.) 各レコードの保持しているトランザクションIDの付け替え
>
> 件のWARNINGは 2. に関連して出てます。
>
> 結論から言うと、テーブルのフラグメント解消のためだけなら、
> ユーザDBをVACUUMすれば事足りますが、2の問題もあるので、
> templateデータベースもある程度の頻度でVACUUMしなければなりません。
>
> 以下、ざっくりとした解説です(余談ともいう)。
>
> PostgreSQLでは各トランザクションに対してレコードを見せるかどうかを
> 各レコードの保持するトランザクションIDを使って判断していますが、
> トランザクションIDに32ビット整数を周回させながら使っているため、
> 周回した後も放っておくと前後関係が分からなくなります。
>
> これは、まったく更新のないデータベースであっても必要になります
> (トランザクションによるテーブル読み出しに関連するため)。
>
> そのためFREEZEというメンテナンス処理が必要になりますが、
> これはVACUUM処理の中で行われます。
>
> というわけで、読み出し専用のDBであっても、ある程度の頻度で
> VACUUMが必要、という話になるのでした。
>
> オフィシャルマニュアルで言うところの「21章 定常的なデータベース保守作業」
>> 「21.1.3 トランザクションIDの周回エラーの防止」のところですね。
> ただ、これ読んで完全に分かるかどうかは微妙なところですが。。。
>
> #ここらへん、文章で説明するの難しいので、
> #誰かFlashで作ってくれないかなぁ、とか思ってみたり。
>
> ちなみに、pg_database の datfrozenxid というのを見ると、
> vacuumする前は30億くらいで、vacuum後に10億くらいになっているのが
> 分かると思いますが、これがfreezeされた証になります。
>
> > 永安様
> > 成瀬です。
> >
> > おっしゃるとおり、vacuumdb -a -zを実行した結果、WARNINGが発生しなくなり
> ました
> > 大変ありがとうございました。
> > 以前の状態では結果的にDBのフラグメントは解消できていなかったのでしょ
> うか?
> >
> > 実行前後のselect * from pg_databaseです。
> >
> >   datname  | datdba | encoding | datistemplate | datallowconn | datlast
> sysoid |
> > datvacuumxid | datfrozenxid | datpath | datconfig |        datacl
> > -----------+--------+----------+---------------+--------------+--------
> -------+--------------+--------------+---------+-----------+-------------
> ---------
> >
> >  template1 |      1 |        1 | t             | t            |
>  17140 |
> >        333121 |   3221558594 |         |           | {????=C*T*/????}
> >  template0 |      1 |        1 | t             | f            |
>  17140 |
> >           464 |          464 |         |           | {????=C*T*/????}
> >  dbname1   |      1 |        1 | f             | t            |
>  17140 |
> >    2217850857 |   1144109034 |         |           |
> >
> >
> >   datname  | datdba | encoding | datistemplate | datallowconn | datlast
> sysoid |
> > datvacuumxid | datfrozenxid | datpath | datconfig |        datacl
> > -----------+--------+----------+---------------+--------------+--------
> -------+--------------+--------------+---------+-----------+-------------
> ---------
> >
> >  template1 |      1 |        1 | t             | t            |
>  17140 |
> >    2219027995 |   1145286172 |         |           | {????=C*T*/????}
> >  template0 |      1 |        1 | t             | f            |
>  17140 |
> >           464 |          464 |         |           | {????=C*T*/????}
> >  dbname1   |      1 |        1 | f             | t            |
>  17140 |
> >    2219030736 |   1145288913 |         |           |
> >
> >
> >
> >
> >
>
>
> --
> NAGAYASU Satoshi <nagayasus @ nttdata.co.jp>







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