[pgsql-jp: 36272] Re: VACUUMの性能を向上させたい

SAKATA Testuo sakata.tetsuo @ lab.ntt.co.jp
2005年 10月 27日 (木) 14:57:51 JST


こんにちは。坂田@横須賀です。

ざっと拝見したところ、データは全部で5000万行、
そのうち720万行が毎日入れ替わる(1週間で全部新しくなる?)、
というシステムのようですね。

よって、vacuumなしの場合には、データの1/7が(DELETEで削除されて)
ゴミとなってDBファイル内にたまっていくわけですね。

問題となっている点は2つあって、

P1. 書き込み動作が間に合わない
P2. DBのメンテのためのvacuum full analyze に時間がかかる
  (のみならず、所要時間が延びていく)

ということでしょうか。

P1. については、vacuum中の書き込み動作だけが間に合わないのか、
それとも定常的に間に合っていないのか不明ですが、とりあえず、
より負荷がかかるvacuum中に間に合わないのは確実でしょうから、
P2.から考えましょう。

Izumiさんのケースでは、DBのサイズは一定に保たれ、かつ、毎日全体の
1/7が書き換えられていく、というものですから、当然vacuumが必要ですね。
vacuumには2通りありますが、このケースでは、更新頻度が高くて
データ量が一定なので、vacuum full を実行して、DBファイルのサイズを
切り詰める作業はムダであろうと思います。

よって、vacumm full は通常の vacuum で良いと思います。
http://www.postgresql.jp/document/pg734doc/admin/routine-vacuuming.html
(上記のページの 8.2.1)
回収後のディスク上の空きページを保持するために、postgresql.confにある
max_fsm_pages の値を適切に設定する必要があります。

ただし、通常の vacuum では、(確か)インデックス領域上のゴミは
回収しませんから、必要に応じて reindex を実施するのが良さそうです。
http://www.postgresql.jp/document/pg734doc/admin/routine-reindex.html
(この点については、36271で Tietew さんがお書きになっていますね)

vacuum に関する問題については、これでよいのではないかと思います。

vacuum期間以外でも書き込み動作が遅いという問題(P1)があるようであれば、
WALファイルが入っているパーティションを、DBのパーティションとは分ける、
WALバッファの数を増やす、などの対処を考えるのが良いと思います。

以上、気づいた点を書きました。
#でも、あまり詳しくないので、識者のフォローを待ちたいと思います。

Yumiko Izumi wrote:
> お世話になっております。Izumiです。
> 
> VACUUMの性能向上について質問させてください。
> 
> <稼働環境>
> OS:RedHat Enterprise Linux AS Release 3(Taroon Update 6)
> CPU:Xeon 2.8GHz
> メモリ:20GB
> HDD:80GB(S-ATA)
> PostgreSQL:7.3.8

余談ですが、すごいスペックのマシンですね。
メモリ20GBに対して、ディスク80GBというのは…
(2.0GBの間違いかな)


> <測定条件>
> ・テーブル数が3500ほどあるDB
> ・2分間隔で1000テーブルに合計1万行を書き込む
>  →合計で1日に720万行書き込まれる。
> ・書き込むテーブルにはインデックスがついている
> ・書き込むテーブルにはすでに5万行書き込まれている
>  →1000テーブル合計で5000万行ある。
> ・書き込むテーブル内のデータは一定量に保たれる
>  →定期的に不要となったデータのDELETEをしている
> ・VACUUMはDBに対し、以下サイクルで行っている。
>  VACUUM ANALYZEを4時間置きに1日6回
>  そのうち1回はVACUUM FULL ANALYZE
> 
> <備考>
> あるパッケージソフトに含まれるデータベースです。
> 他にもメモリやディスクを使うプロセスが多数動作するため
> リソースをDBが独り占めできない状態です。
> 
> 上記環境でデータ書き込みの性能測定をしていましたが、極端に時間が
> かかり、書き込みが間に合わないケースが発生しました。
> 
> そこでネックを探っていったところ、VACUUMを行っている時間帯にディスク
> I/Oがネックになっていることがわかりました。
> 
> 計測の結果、VACUUM FULL ANALYZEの時間が1日目は30分程度だった
> ものが日を追うごとに長くなり、5日目には倍以上の時間がかかるようになっ
> ていました。
> 
> そこで、このネックを解消するための対策として、以下を考えました。
> これらが有効かどうか、有効な場合どうすべきか、アドバイスを
> いただけないでしょうか?
> 
> 1.PostgreSQLのチューニング
>  postgresql.confの内容で、有効なものがありますか?
> 
> 2.PostgreSQLのバージョンアップ
>  7.4.xや8.0.xにあげることで、VACUUMの性能は向上しますか?
>  また、バージョンアップが有効な場合、手順についてもアドバイス
>  いただけると助かります。
> 
> 以上よろしくお願いします。
> 
> 
> 


-- 
sakata.tetsuo _at_ lab.ntt.co.jp
SAKATA, Tetsuo. Yokosuka JAPAN.



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