[pgsql-jp: 34223] 同じデータのテーブルでselectが遅い
oppara
mlml @ oppara.tv
2004年 10月 31日 (日) 03:34:06 JST
こんばんは、大原と申します。
PostgreSQLとperlで作成したwebアプリ上で、ページの表示が
遅くなったと言われ、調べてみると5つあるテーブルのうち、
1つのテーブルだけ、selectが遅くなっていました。
EXPLAIN ANALYZEしてみると、
hoge_db=# EXPLAIN ANALYZE SELECT * from hoge;
QUERY PLAN
----------------------------------------------
Seq Scan on hoge (cost=0.00..12928.48 rows=48 width=146)
(actual time=0.52..6485.02 rows=48 loops=1)
Total runtime: 6485.25 msec
(2 rows)
何度、確認しても6000 msec前後かかりました。
他のテーブルは、だいたい0.5 msecくらいです。
VACUME, ANALYZEを試してみましたが、状況は改善されませんでした。
hogeテーブルには50件くらいしかデータが入っていません。
pb_dumpして他の環境でテストしてみると、他のテーブルと速度が
変わらなかったので、試しにhogeテーブルと同じテーブルを作成し、
hogeテーブルのデータをコピーして試してみると他のテーブルと
変わらない速度になってました。
hoge_db=# EXPLAIN ANALYZE SELECT * from hoge_copy;
QUERY PLAN
-------------------------------------------------
Seq Scan on hoge_copy (cost=0.00..2.48 rows=48 width=988)
(actual time=0.03..0.40 rows=48 loops=1)
Total runtime: 0.48 msec
(2 rows)
同じテーブルの構造、データでこのような速度差ができるのは何故でしょうか?
以前hogeテーブルに対して、他のプロセスがアクセスできないほど、UPDATEを
繰り返し行った事があり、その時のUPDATEエラーが足を引っ張っているのかと
考えましたが、私の知識では確証はもてません。
何か考えられる点が有りましたら、御教授お願いします。
以下、環境とテーブルの内容です。
PentiumIII 1133MHz
メモリ 512MB
Red Hat Linux 7.3 2.96-113
perl v5.6.1
DBI 1.42
DBD::Pg 1.32
Class::DBI 0.96
PostgreSQL 7.3.4
postgresql.confの設定はデフォルトのままです。
Column | Type | Modifiers
-------+-----------------------------+---------------
id1 | character varying(32) | not null
id2 | character varying(32) | not null
title | character varying(256) | not null
open | timestamp without time zone | not null
close | timestamp without time zone |
url | character varying(256) | not null
flg1 | character(1) | default '0'
id3 | integer | default '1'
flg2 | boolean | default '1'
date1 | date |
date2 | date |
date3 | date |
date4 | date |
date5 | date | default now()
count | integer | default '0'
Indexes: hoge_pkey primary key btree (id2)
Foreign Key constraints: $1 FOREIGN KEY (id1)
REFERENCES hoge_master(id) ON UPDATE NO ACTION ON DELETE NO ACTION
pgsql-jp メーリングリストの案内