[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.jp
◇ http://www.digitune.org/
pgsql-jp メーリングリストの案内