[pgsql-jp: 32966] 問い合わせの速度低下
Mao Morimoto
yneko2 @ yamamaya.com
2004年 5月 18日 (火) 11:58:44 JST
たびたびお世話になってます。もりもとです。
PostgreSQL7.4.2を利用しているのですが、
パフォーマンス面で悩んでいまして・・
毎日24時間、5分おきに500レコードずつどんどん追加されていくテーブルがあ
ります。
TABLE T_RESULT
TIME_SMPL TIMESTAMP
CHECK_ID INTEGER
CHECK_SUB INTEGER
以下、データフィールド
:
このようなテーブルで、TIME_SMPL、CHECK_ID、CHECK_SUBの三つのフィールドが
重複キーのようになっていて、
TIME_SMPL の重複インデックス I_RESULT_1
CHECK_ID + CHECK_SUB の複合重複インデックス I_RESULT_2
TIME_SMPL + CHECK_ID + CHECK_SUB の複合重複インデックス I_RESULT_3
この、三つのインデックスを念のため設定してあります。
なぜインデックスが三つかというと、VACUUMした後におなじSELECT文をEXPLAINする
と、インデックスがどれか一つだけだと、時々シーケンシャルスキャンになってしま
うのです。三つあると、必ずどれか一つを使ってくれるようです。
(主に使われるのは、I_RESULT_1+Filterのパターンと、I_RESULT_3だけのパターン
のようです)
そこで、問題なのですが・・ CHECK_IDとCHECK_SUBとTIME_SMPLを条件としてレコー
ドを取り出すだけの簡単なSELECT文の実行時間が、データがたまるとどんどん遅く
なってしまうのです。(1日動かすと144000レコード増えて、SELECTの問い合わせに
かかる時間は20倍くらいになってしまいます)
遅くなったときに VACUUM ANALYZE するとまた元通り早くなるのですが、またしばら
くすると遅くなってきますし、データがたまってくるとVACUUM自体がとんでもなく時
間かかってしまうので、こまめに実行できる状況ではありません。。
もしかして、追加されたレコードについてはVACUUMするまでインデックスが有効にな
らないのでしょうか。。?
また、このような場合の何かいいパフォーマンス対策はありますでしょうか。。?
- Mao Morimoto
http://blog.yamamaya.com/
pgsql-jp メーリングリストの案内