[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 メーリングリストの案内