• ベストアンサー

サーバ負荷を考慮した処理

apache2, PHP4.1, MySQL4でECサイトを構築しています。OSはLinux。 注文情報をMySQLのテーブルに格納した後、MySQL以外にも別にDBが存在しており、そちらにも同時にXML形式で渡して格納しています。 しかし負荷が上がると別DBへのアクセスがボトルネックになっているようで、ECサイト側のLoad Averageが高くなっているところまで判明しました。 MySQLと別DBは完全同期でなくてもかまわないので、できれば、ブラウザのアクセスとは切り離した形で、テーブル内の情報を別DBにポツポツアップしていきたいのですが、どのようなやり方が最適でしょうか。

  • gapp
  • お礼率70% (12/17)

質問者が選んだベストアンサー

  • ベストアンサー
  • dummyplug
  • ベストアンサー率58% (134/230)
回答No.1

その別DBには何のために書き込んでいるんですかねぇ…、という疑問は置いておいて、後でゆっくり書き込めばいいというのであればブラウザからのアクセスはMySQLへのアクセスまでで閉じるようにして、定期的またはMySQLに変更があったときだけ別プロセスを起動してレプリケート(とはちょっと違いますけど)というか別DBへの書き込みをすればよいのではないでしょうか。 (オンデマンドでなく)定期的に差分バックアップをとるように別DBに移すというのが性能などを見積もりやすいかと思いました。 規模とかMySQLと別DBの関係がわからないので、そう簡単にはいかないことがあるのかもしれないですけれども。

gapp
質問者

お礼

dummyplug様 ご回答ありがとうございます。 まさに定期的、または変更があった場合に差分のみ移すというのが理想なのですが、具体的にどのように実現したらよいのでしょうか? Cronでぐるぐる回すのがよいのでしょうか。それともMySQLの機能で、変更があったら何かをキックするなんてこともできるのかなぁ・・?

その他の回答 (1)

  • dummyplug
  • ベストアンサー率58% (134/230)
回答No.2

ちょっと時間が空いちゃいましたね。ごめんなさい。 cronで回すのもMySQLのイベントを使うのもどちらもありだと思います。 ただ、個人的にはレコードが更新されたらというイベント(トリガ)で起動するよりも定期起動の方がよいのではないかと考えています。後者の方がサーバの負荷を読めそうな気がするからなのですけれど、実際に設計してみてイマイチなようなら更新トリガを使って動かすというのももちろん構わないと思います。 更新があったら速やかに何か(この場合XMLを別サーバに送る)をしたいというならトリガを使うところですけど、そんなに焦る処理でもないのなら定期起動の方が動きを読みやすいし、監視もしやすいと思います。 処理方法の参考としてURLを挙げておきます。 【MySQLウォッチ】第39回 イベントによる定期実行処理の自動化 http://itpro.nikkeibp.co.jp/article/COLUMN/20080401/297671/ 【MySQLウォッチ】第16回 MySQL 5.0ベータ版リリース,新機能トリガーとビューを試す(こちらはちょっと前の記事ですけど) http://itpro.nikkeibp.co.jp/members/ITPro/oss/20050422/159972/?ST=oss

gapp
質問者

お礼

dummyplugさん  詳しい説明ありがとうございます。 MySQLにもトリガなどあるんですね。 おかげでCronやトリガのメリットデメリットもわかりやすかったです。 本当にありがとうございました。

関連するQ&A

  • サーバーの負荷テストをしたい

    自宅で、WEBサーバーとDBサーバーを立ち上げています。 サーバーには、PHPやPerlで書かれたWEBアプリが入っています。 最近、アクセスが増えて300人位のユーザーが一斉にアクセスすると、レスポンスが遅くなるようになりました。落ちたこともあります。 このサーバーはこのプログラムで、どの程度の負荷にまで耐えられるのか、また余裕をもって動かすならどの程度の増強(サーバーの追加など)をしたらいいのか、わからないので負荷テストをしてみたいと思いました。 負荷テストの経験は全くありません。 一通り、ネットや本屋も見たのですが、よくわかりませんでした。 また、OSは、Cent OS3、WEBサーバーはApache2.2、DBはMySQLおよびPostgreSQLを使っています。 サーバーの負荷テストの方法について、教えていただけないでしょうか? よく解説しているサイトなどでも助かります。

  • GDの画像変換でサーバーに負荷

    phpで画像処理するのにGDを利用しています。 しかしアクセスが増えるとすぐにapacheの負荷が上がってしまいLoad Averageが一気に増えてしまいます。 主に携帯サイトで使っていますが、負荷を下げるにはどのような手段がありますか? 試しにAPCを入れてみたのですがいまいちでした。 よろしくお願い致します。

    • ベストアンサー
    • PHP
  • サーバー負荷テストはどのようにしていますか?

    サーバー負荷テストはどのようにしていますか? 始めまして。私は現在、WEBでの開発をしております。開発内容はモバゲー向けのソーシャルアプリとして提供する某会社のキャラクターが日本全国を自由に旅行できるGPS連動ゲームです。 現在テスト環境に実装はできていて、ニフティクラウドに負荷テスト用のサーバ(ロードバランサ(AP:mod_dosdetector,ipvsadm,keepalived,httpd)×1+APサーバ×2(Apache:httpd)+ロードバランサ(DB:ipvsadm,keepalived)×1+DBサーバ(マスタ:mysql)×1+DBサーバ(スレーブ:mysql)×2の7台構成です。 更新処理ではDB(マスタ)、参照処理はAPサーバからロードバランサ(DB)を介して、DB(ステーブ)を見ています。 この環境でサーバーの負荷テストをしたいと思っているのですが、まったくノウハウがありません。 サーバーの事についてあまり知識がなく、これからどのようにしたらできるのかまったくわからない状態です。 説明不足で申し訳ないですが、サーバー負荷テストの方法について、ご教授頂けないでしょうか? 何卒、宜しくお願い致します。

  • apacheの負荷分散方法のアイデアありませんか?

    こんにちは。 Linuxで自宅サーバを立てています。 1台のPCにWEBサーバとしてapacheが入っています。負荷分散&PCが故障したときのためにPCを2台使って負荷分散的な事ができないかと思っています。googleで検索しましたら様々な方法や機器があるようですが、実際のところ本格的な負荷分散のため、というより(そこまでアクセスありません笑)勉強のためやってみたい、というところが大きいので高価な専用ハードやソフトを使わずにできる方法はないかなと模索しています。 ルータ--------| | --------------- | | PC-1(apache) PC-2(apache) | | ------|--------- | PC3(MYSQL) WEBサーバを二重化しても回線やDBがそのままだとあんまり意味無いよ、とつっこみどころはあるかと思いますがご経験談やアドバイスなどお聞かせください。

  • DBの負荷の減増

    PHPとMySQLを使用しWebアプリを作成しています。 どちらのほうがデータベースにとって負荷がないのでしょうか? ・各アプリケーションごとに専用のデータベースを作成しテーブルを作成する。 ・一つのデータベースで、各アプリケーションのテーブルを作成しデータを格納する。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • 負荷ダウン対策

    WEBサイトからのMySQLの登録閲覧で同時アクセスが負荷が増えサーバーがダウンしないようにする一番有効な対策てなんでしょうか。

    • ベストアンサー
    • MySQL
  • リクエストパラメータ数とDB負荷の比較

    こんにちは。 今、下記の環境で携帯向けのWebアプリケーションを作成しております。 apache 2.2.3 php 5.1.6 mysql 5.1 cent_os 5.5 15個の項目をDBから抽出して画面に表示し、次の画面に遷移するリンクが表示されている画面があります。 次の画面には15個まったく同じ情報を渡して表示させてます。 悩んでいる箇所としましては、画面に表示しいている項目15個を次の画面に遷移するリンクのリクエストパラメータに付与するか、それともDBから抽出する際のユニークID1個をリクエストパラメータに 付与しようか迷ってます。 迷っている理由としましては、15個も付与する場合は可読性が悪くなってメンテナンスが悪くなるので はと思っています。 ユニークIDを渡す場合は、頻繁にアクセスされる場所なのでDBに負荷がかかってレスポンスが悪くなるのではと考えてます。 同じ情報をとるのに何度もDBにアクセスするのは良くないのでしょうか。 なお、formを使ってhiddenの値をsubmitで送る方法は仕様的にダメだそうです。 みなさんでしたら、どちらの方法が良いかアドバイスを頂けますでしょうか。 もしくは、他に良い方法がありましたら、教えてください。

    • ベストアンサー
    • PHP
  • AWSとRDSMySQL

    外部業者さんで開発したシステムを自社で管理することになりました。 EC2にWEBサイト、RDSにDBが設定されているということまでわかりました。 EC2側のバージョンとRDS側のMYSQLのバーションが違うようなので EC2側を一旦アンインストールして、再度新しいバーションをインストールしたいのですが 一旦アンインストールしても問題がないのかとても不安です。 EC2側のMySQLが使われているかどうか(DB一覧、テーブル一覧)を確認するにはどのようなコマンドで確認できますでしょうか? また、システムは稼働中なので、EC2側のMySQLをアンインストールすると 当然、WEBサイトからRDSとの接続はできなくなるという認識で良いでしょうか (それともRDSのMYSQLが起動していればWEBサイトは影響がない?) 聞ける人が社内におらず恐縮ですが何卒宜しくお願い致します。

    • ベストアンサー
    • MySQL
  • MP3導入後にCPUの負荷が高くなってしまいました。

    お世話になっています。 新しく立ち上げたサイトでMP3ファイルを約2000個アップロードして運用しております。1つのファイルは平均約900KBで、MySQLからファイル名を参照して、PHPで動的に各ページに関連するMP3ファイルのリストがページに出るように処理し、MP3ファイルへリンクを作ってダウンロードできるようにしております。 当初は特に問題は無かったのですが、最近はアクセスが増えてきてダウンロード数も増えてきたため、朝方サーバーのCPUの負荷が90%を超えてしまい、またメモリの消費量も多く非常にサーバーが重たくなってしまうこともあります。MySQL の処理と apache へのアクセスによりメモリ・CPUを多く消費しており、CPU の処理が追いついていず、処理待ちのプロセスが多くなっているようです。 とりあえずは、毎朝crontabでhttpdを再起動して負荷を収束させています。 ちなみに、OSはRed Hat Enterprise Linux ES4で、 サーバースペックはPentiumIII 1GHz メモリー512MBです。 各アプリケーションのバージョンは MySQL4.1.2 PHP 4.4.6 Apache2.0.52 となっています。 様々な要因が考えられると思いますが、CPUやメモリへの負荷を軽減するにはどのような対策が考えられますでしょうか? MP3のストリームサーバーを導入やメモリの増設をすればクリアされるものでしょうか。ご存知の方おりましたら、アドバイスいただければ幸いです。

  • DBサーバを二台設置したときの扱い方について

    質問させて頂きます。 MySQLを用いたDBサーバを二台設置します。 WebサーバからDBサーバにアクセスしてデータを取得するとき 不整合などは生じないでしょうか? 負荷分散が一番の目的のようなので、クラスタリングになるのかと思い この疑問に至っています。 また、DBのレプリケーションでも負荷の若干の分散は行えるのでしょうか? 通常DBは二台設置すると上に言われましたが、扱い方などは私に一任されており どのように扱えばいいのか悩んでおります。 どうぞご教授の程お願いいたします。