
PostgreSQLのDBで運用しているシステムで、特定のファイルのアクセスだけ極端に遅くなります。
select * from tbl where tbl_seri='1';
のような処理が、最初は3ms程度ですが、12時間運用すると400msほどになります。
(上記のtbl_seriはシリアル型のカラムです。それ以外のindexはありません)
遅くなるのは特定の1テーブルのみでそれ以外のテーブルの速度は1ms以下です。
3日ほど運用すると数分反応しなくなるので、現在は1日1回ダンプ→リストアでデータベースを再構築しています。
再構築直後から次第に遅くなっていきます。
原因と対策を教えていただけますでしょうか。
試したこと
VACUUM tbl; -->結果×
VACUUM; -->結果×
select * from tbl limit 1; -->1ms以下
select * from tbl limit 1; -->だんだん遅くなる
試したこと【2】
ご指摘いただいた内容について実施しました(結果:ほぼ解決)
以下、EXPLAIN SELECT * FROM tbl WHERE tbl_seri=1; の結果と処理時間
試す前の状態
Seq Scan on tbl (cost=0.00..71755.30 rows=3142 width=506) 350ms
↓
VACUUM tbl;実施後
Seq Scan on tbl (cost=0.00..64434.24 rows=33 width=506) 320ms
↓
VACUUM FULL;実施後
Seq Scan on tbl (cost=0.00..310.24 rows=33 width=506) 2.9ms
↓
REINDEX TABLE tbl;実施後
Seq Scan on tbl (cost=0.00..310.24 rows=33 width=506) 2.8ms
↓
VACUUM ANALYZE;実施後
Seq Scan on tbl (cost=0.00..535.24 rows=1 width=264) 3.3ms
明日、VACUUM FULL;なしを試してみようと思います。
補足情報
PostgreSQL 8.1.23
システムへのアクセス
1日 5000件くらい
うち該当テーブルへのアクセス
select 1日500件くらい
insert,update 1日1件くらい
該当テーブルはWindowsのCSVデータをLinuxのPostgreSQLのEUCのテーブルにインポートしており、最初にリストアしたときは文字化けでエラーになったので、文字化けしているデータを削除しています。
回答2件
あなたの回答
tips
プレビュー