TAMURA Toshihiko
tamur****@bitsc*****
2003年 1月 11日 (土) 14:25:43 JST
こんにちは、田村です。 負荷が高いosCommerceサイトでどう対策するかというテーマは、 とても関心があるんですが、これまでまとまったテストをすることができてなくて、 非常にもどかしいです。 > > それから、よく言われるのは、max_connections の値がネックになることが > > あるということですね。 > > これは、 max_connectionsをもっと取った方がいいということでしょうか? > どうも挙動を監視していると、同時接続数が多すぎてうまく処理できていない > リクエストが多く見られるような気がするのですが。 max_connections の数が足りないというのは、 (osCommerceの場合ということではなくて)アクセスが多いサイトでは よくありますが、 今回は、それ以下の接続数で処理できていないということを 把握されているわけですね。 > > ●ハードウェア > > ハードウェアの性能に頼るのは手っ取り早いのは確かですよね。 > > メモリ量を増やせれば効果は大きいと思いますし、 > > MySQLのデータを格納するディスクを分けるのも効果があります。 > > そうですね。DiskIOが足を引っ張っているかもしれません。 > ただ、CPU使用率は下がらないかも。 > > > > ・MySQLの使用メモリを512MB程に設定 > > これは、効果がありましたか? > > 最初、何も手を打たないと同時接続数30ぐらいでCPU100%になっていましたが > 対策を全部行ったあとは70接続ぐらい捌けるようになりました。 > どの手がどのくらい効いたかはよく分かりませんでした。 データベースのチューニングは、データベース構造の最適化なんかを除けば、 いかにメモリのスワップを少なくするかということが大きな目標だと思います。 # スワップが頻発している状況でmysqldのCPU使用率がどうなるか # 分からないんですが、ご存知ですか? かえって下がるんでしょうか。 # 少なくとも、1接続あたりの平均の処理時間を短くできれば、 # mysqldの負荷を抑えることで、実質は改善されるのでは。 例えば接続数の目標を100にするとすれば、 それを実現するために見直す設定はあるのではないでしょうか。 「PHP4 徹底攻略実践編」を参考にすると、 1接続あたり、PHPのプロセスで2MB以上、 (PostgreSQLの場合で)持続的接続のメモリ消費量が2MBくらいだそうです。 持続的接続は、接続がオープンされたままになるため、 接続によるメモリ消費量が無駄に大きくなってしまうので、 php.iniの mysql.max_links の設定を調整することも有効なようです。 現状の70接続は、どの値なんでしょうか。 > それからまた質問になってしまうのですけれども > Tepの最新版では、トランザクションを使用していますでしょうか? トランザクションの使用は考えてないと思います。 > 先の投稿でもちょっと書いたのですけれど、 注文確定の段階で > カートからordersへのデータ移項時の途中終了が非常に多いようです。 > ここは、複数レコードが作成される場所ですので、トランザクションで > まとめてやらないとまずいと思うのですが。 > (Mysqlでうまく処理できるのかどうかは分かりません) > また、在庫の引き落としも、同時アクセスは考慮されていないようです。 > だいぶ実在庫とのずれが出ています。 > > ここらは割と一般的なことだと思うのですが、どうでしょうか。 そうですね。トランザクションの問題は弱点だと思います。 トランザクションを破棄するのは、次のような場合だと思いますが、 (a) ロジック的に取引を中断する必要がある場合 (b) 今回のような外部的な要因で接続が中断? される場合 osCommerceでは、(a)が必要なのは在庫の引き落としくらいでしょうから、 トランザクションを採用することによって重くなるのと比較すると、 当面は今の状態が続くのではないでしょうか。 とはいっても、データベースの整合性が取れないのは非常に気持ちが 悪いですから、コントロールするノウハウは蓄積したいですね。 -- 田村敏彦 / 株式会社ビットスコープ E-mail:tamur****@bitsc***** http://www.bitscope.co.jp/