[pgsql-jp: 29330] Re: パフォーマンス向上策

Satoshi Nagayasu snaga @ snaga.org
2003年 3月 9日 (日) 17:02:40 JST


永安です。

Shigekazu Aoyagi <aoyagi @ ss.iij4u.or.jp> wrote:
> 青柳です。

> > PostgreSQL内部では1テーブル1ファイルになっているものと思われます。
> > # $PG/data/base/[DB名]/ 以下をのぞいてみただけですので、
> > # これを別のところで管理しているとしたら外しています。
> > でもって、同じディレクトリの中に数万ものファイルがあると
> > 各ファイルにアクセスするのにものすごく時間がかかります。
> > たぶん、indexを張るのも無駄だと思います。

これは本当なのでしょうか?

> すいません。ファイルシステムまで考慮が至ってませんでした。
> 確かに数万ファイルあると厳しそうですね。元質問者の方にはとりあえず
> % /usr/bin/time ls でどれくらい時間が掛かるか調べてもらうのが
> いいかな。

lsが遅いのは、ファイルシステムが遅いんじゃなくて、readdirした結果をソー
トしてるからだと思っていたのですが、違うのでしょうか。

% find . -type f | wc
 100001  100001 1100007

% time /bin/ls > /dev/null 
3.770u 0.270s 0:04.03 100.2%    0+0k 0+0io 161pf+0w

% time /bin/ls -U > /dev/null
0.280u 0.180s 0:00.46 100.0%    0+0k 0+0io 152pf+0w

% time cat 00000001 > /dev/null
0.010u 0.000s 0:00.00 0.0%      0+0k 0+0io 130pf+0w

それに、テーブルのファイルを見つけるときに、まさかディレクトリの全スキャ
ンなんてやってるとは思えないのですが。

10万ファイルあるディレクトリでも、ファイル名を指定して読み込むのは一瞬で
終わるみたいですし。

> ファイルシステムが最大のボトルネックだったとしたら、ファイルシステム
> レベルでチューニングをするにしても限度があるし、やっぱりテーブル設計の
> 見直しが必要ですね。

話の発端としては、基本設計が悪い(破綻してる)のを他人のせいにしているよ
うにしか見えません。今見直してどうにかできるなら、最初からそういう設計は
しないでしょう。

-- 
NAGAYASU Satoshi <snaga @ snaga.org>




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