[pgsql-jp: 32324] Re: 数万アクセスに対する対処について

Tsunehisa Kazawa kazawa @ ca2.so-net.ne.jp
2004年 2月 20日 (金) 08:10:15 JST


こんにちは。加澤と申します。

PHP については全然知らないんですが、何らかの ConnectionPool 的なものを使
わない限り、(特に DB サーバが Solaris である場合) ほとんど性能が出ないの
ではないかと思います。

ちなみに ConnectionPool を用い、IO 分散して最適な Connection 数や共有メ
モリ量などの設定をチューニングした後の PostgreSQL 7.4.1 (Xeon 3G×2、
4Gbytes メモリ、RHEL3) で、ほぼ単純 insert のみのアプリならば 1000
insert/sec 以上出ています。

// チューニング時に参考になったページ。
// http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html
// 共有メモリを増やし過ぎるとダメなんですよね…。

なお、この ML でこれを書くのは反則かもしれないんですが、
・どうしても接続&切断を繰り返す必要がある。
・データは多少失われても問題ない。
という条件ならば、MySQL も検討する価値があるかもしれません。flush なしの
MyISAM テーブルでは 10000 insert/sec を越すことも可能でした (ただし
ConnectionPool 使用)。

トランザクションが使える InnoDB だとそこまで性能はよくなくて、そこそこ
チューニングして PostgreSQL の倍程度。flush オプション付き MyISAM はもっ
とひどい、という状況でした。

***

何にせよ小野さんも↓で行われているように、実アプリケーションを模した形で
のベンチマークを取るのが一番良いのではないかと思います。Web Application
ならば Jakarta Jmeter なども使いどころがあるかもしれません。
http://jakarta.apache.org/jmeter/index.html

Kenji Ono wrote:
> マシンスペックが、CPU:SPARC64 V1個、Mem:2G、でWEB+
> DBが同居する形のマシン上で以下のテストをしてみました。
> ・あるテーブルの1行を更新するクエリを投げるPHPを作成
> ・そのプログラムを起動するPHPをbodyのonLoadで実行するように
>  し、300フレーム分割する
> ・これを2台のPCで同時に呼び出す事で600アクセスを擬似的に
>  起こす
> TOPコマンドで確認したところ、CPUは100%、メモリは2G中1Gくらい
> 使ってました。
> DBに対するアクセスは15回/1秒くらいになってました。
> 
> あまり詳しくないので初歩的な話しですが、PG_QUERYを呼び出すと
> Fork&Exceが発生するのですか。
> それともPG_CONNECTION毎でしょうか。
> 
> CPUは2枚でもいけそうなのかな。
> 4枚さしてMem2Gだと400万くらいしそう・・・。


-- 
  ◇   加澤恒央 Tsunehisa KAZAWA
◇  ◇ mailto:kazawa @ ca2.so-net.ne.jphttp://www.digitune.org/




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