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

Yuichiro Namekawa skd2 @ 50mb.com
2005年 10月 30日 (日) 14:10:36 JST


こんにちは、
行川と申します。

以前、似たような仕様のシステムを作ったことがありますので
そのときに採用した方法をご紹介します。

テーブルの承継を使う方法です。

テーブルA を作り、
テーブルAから承継してテーブルB1、B2、B3・・・Bxを作り、
データはテーブルBのいずれかのテーブルに insert します。
この際、時系列にそって、insert 先のテーブルを変えます。
(7日分であれば、たとえば、1日分を1テーブルにして、
日付ないし曜日によってテーブルを変えます。)

(また、テーブルAに対して select をすると、
各テーブルBに入っているデータをまとめて select しますので
従来と同じ要領でデータを select できます。)

古いデータを削除するには、テーブルAに対してではなく、
各テーブルBのうち、該当する古いデータが入っているテーブルに
対して delete をかけます。vacuum も同じです。
このようにすることで、delete/vacuum コマンドが
捜索するデータ件数が少なくなり、delete/vacuum が早くなります。
(勘違いかもしれませんが、新しいバージョンでは、テーブルの承継を
する際に、各承継テーブルに入るデータの範囲を指定する機能が
加えられていたような気がします。それを使っても同様になると思います。)

(更にうまく設計すると、delete/vacuum の代わりに、
drop table/create table(inherits) を使うこともできます。
不要になったデータが入っているテーブル自体を
drop table してしまうことで、delete/vacuum が
データを捜索すること自体なくなります。)


もっとも、承継には
unique 制約などが実際にデータを挿入するテーブル単位でしか
働かないといった仕様上の制限がありますし、
> ・書き込むテーブル内のデータは一定量に保たれる
> →定期的に不要となったデータのDELETEをしている
ここの部分の仕様と適合するように作ることができるのか、
こういった点を考慮していただく必要があると思います。


よく分からない説明になってしまったかもしれませんが、、
参考にしていただければ幸いです。

行川


On 10/27/05, Yumiko Izumi <izumi-yumiko @ tokyo.scnet.co.jp> 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
>
> <測定条件>
> ・テーブル数が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の性能は向上しますか?
> また、バージョンアップが有効な場合、手順についてもアドバイス
> いただけると助かります。
>
> 以上よろしくお願いします。
>
>


--

--------------------------------
Yuichiro Namekawa/SKD
http://www.50mb.com/~skd/
skd @ 50mb.com  (携帯転送:skd-phone @ 50mb.com)
PGP Fingerprint: 4833 1D80 7F81 B685 F3F8  3723 A67B 966B 5A08 8DCC



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