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