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

SAITO Masaru daisaito @ lares.dti.ne.jp
2003年 3月 9日 (日) 18:21:32 JST


齋藤@横浜です。

202003/03/09 17:02:40 ごろ
Satoshi Nagayasu <snaga @ snaga.org> さんは以下のように書きました
> 永安です。
> 
> Shigekazu Aoyagi <aoyagi @ ss.iij4u.or.jp> wrote:
> > 青柳です。
> 
> > > PostgreSQL内部では1テーブル1ファイルになっているものと思われます。
> > > # $PG/data/base/[DB名]/ 以下をのぞいてみただけですので、
> > > # これを別のところで管理しているとしたら外しています。
> > > でもって、同じディレクトリの中に数万ものファイルがあると
> > > 各ファイルにアクセスするのにものすごく時間がかかります。
> > > たぶん、indexを張るのも無駄だと思います。
> 
> これは本当なのでしょうか?

以下の検証結果も含めてファイルシステムに依存していると思うのですが。。
永安さんの環境と小泉さんの環境が一緒なら何も言いませんが。
(少なくともファイルシステムが一緒である必要があります)
私の経験上、スライス(パーティーション)へのファイル容量に対する
inode数が少ない場合はファイルを*ダイレクト*に指定してopenする
場合も遅かったと記憶しております。

また、ディレクトリの中に多数のファイルがある場合は、新規に
ファイルを作成する場合も遅いです。
(insert | update | delete)の操作をする場合はcommitするまでは
別ファイルとして、管理される(と聞いたことがあります。)
この際にもパフォーマンスの低下は多少なりともあると思います。
# これは今回は問題にはしていませんが、確実にあると思います。
# また、下記の検証にも出ていません。



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


---
SAITO Masaru <daisaito @ lares.dti.ne.jp>




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