• ベストアンサー
  • 困ってます

大量同時並行処理時のMySQL

1年くらい前のモバゲーなどはあれだけのユーザとクエリをMySQLサーバ600台位で処理しているそうですが(レプリケーションを考えると実質1/3くらいでしょうが)、どのような工夫がほどこされているのでしょうか? SELECTよりも処理の重いINSERT、UPDATEも1秒間にもの凄い数が来ると思います。 並行処理プログラム等にてDBにアクセスを同時に大量に行う場合等にはどのようなハード構造や、システム設定にすればいいのでしょうか? 1台のDBサーバに複数のMySQLを入れたり、仮想化してOSを複数入れて、とかで対処しているのでしょうか? それとも特にそのような事をしなくても(特に更新系の)大量同時クエリを裁くだけの実力がMySQLにはあるのでしょうか? 宜しくお願いします。

共感・応援の気持ちを伝えよう!

  • 回答数2
  • 閲覧数2843
  • ありがとう数3

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

  • ベストアンサー
  • 回答No.2
  • utun01
  • ベストアンサー率40% (110/270)

モバゲーについてはNo.1さんのご回答で十分かと思いますので、 一般的な話で一つ。 MySQLに限らず、単純なWebシステム処理の負荷分散自体は実はそれほど難しくありません。 (あくまで構成的な概念としては、ですがw) 最近の大規模システムの負荷分散だと以下のような感じです。 1、ロードバランサ下にWebサーバ、APサーバ、DBサーバを複数配置 2、Web:AP:DB = 2:2:1くらいで上記を揃え、各層間でロードバランシングします 3、ストレージをRAID10のSANで複数構成し、処理系とは別ネットワークで同期します 更に最近でしたら、これをクラウド上で構築して、 各ノード数を随時調整できるようにしているとかでしょうかね。 但し、クラウドの場合は単純にDBサーバを増やしても物理ストレージが増える訳ではないので I/O負荷によるボトルネックはどうしようもありませんけども。 まぁ要は MySQLの能力云々ではなく、どのDBであっても 全体のシステム構成で負荷をなんとかしているということです。 単純に処理速度の比較であれば、完璧にチューニングされたOracleには敵わないものの チューニングしていない状態であれば大差無かったと思います。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

なるほど、ありがとうございます。 分かりやすい説明をありがとうございます。 しかし、完璧にチューニングされたOracleってのはやっぱMySQLなんかよりも上なんですね。 知りませんでした。

その他の回答 (1)

  • 回答No.1
  • yambejp
  • ベストアンサー率51% (3827/7415)

数年前のコラムですがこんなのがありました http://enterprisezine.jp/article/detail/25

共感・感謝の気持ちを伝えよう!

質問者からのお礼

リンクを貼っていただき有難うございました。 今、途中まで読んでおります。

関連するQ&A

  • MySQLパフォーマンスについて

    MySQLでレプリケーションを行っております。 例えば マスター1台で スレーブ10台のサーバへレプリケーションをおこなっているとした場合 1.マスターへの負荷はスレーブ1台の時よりかなり増大するものでしょうか?  それとも気にする程でもない程度でしょうか? 2.レプリケーション遅延はスレーブ1台の時より大きくなりますでしょうか? もちろんいろんな状況によって変化するとは思いますが 一般的に考えて、もしくは私見でもよいのでお教え頂けますでしょうか。 MySQLバージョン:5.5.15 1日のページビュー:500万PV 同時アクセス数:200 select と insert,update の比率は同じくらいです。

    • ベストアンサー
    • MySQL
  • お願いします、MYSQLについて

    DBの初心者のものです。 MYSQLについて調べましたが、 いまいち特徴がわかりません。 とくに知りたいことが、 MYSQLは、1秒間あたりにどのくらいの 件数まで処理できるのかということです。 どなたかMYSQLについて 詳しい知識をお持ちの方、 ご連絡頂ければ幸いです。 宜しくお願い致します。

    • ベストアンサー
    • MySQL
  • PHPからMySQLへのクエリの振り分け方法

    LAMP構成のWebアプリケーションでのDBサーバ増設について質問です。 今までDBサーバ(MySQL)1台で運用していたのですが、 1台増設してレプリケーションを行うことになりました。 DBサーバ1:マスター(新設) DBサーバ2:スレーブ そこで、PHPスクリプトを全面的に見直して、以下のように DBへのコネクション部分を変更する必要が出てきました。 ・コネクション中に一度でも更新系のクエリを発行する場合はマスターへ ・それ以外はスレーブへ これをインクルード先まで追って調査するのは現実的ではないため、 一括で振り分ける方法を探しています。 雑で申し訳ありませんが、環境は以下の通りです。 PHP 5.1.6 (cli) PEAR::DB(1.7.13) MySQL 4.1.22

    • ベストアンサー
    • PHP
  • PHPとMySQL、INSERTの動作についての少し疑問点。

    PHPとMySQL、INSERTの動作についての少し疑問点。 現在、PHPとMySQLを使ってHPを作成しています。 会員登録のページが存在し、会員情報をDBに書き込む時にINSERT文を使用しているのですが この動作を複数の人が同時に行った場合、どうなるのでしょうか? DB・PHP・MySQL的にエラーが出るのであれば 『書き込み処理中は時間差で実行する』等の 何か回避策をしなければならないのですが・・・。 その辺りが少し疑問に思ったのでお伺いしたく思います。 初歩的な質問になりますがお教え頂ければ幸いです。 よろしくお願い致します。

    • ベストアンサー
    • MySQL
  • CGIとMysqlで複数のupdate文を実行したい

    CGI(Perl5.8*)のDBIモジュールでのMysqlの質問です。 //////////////////////////////////////////// $sql = " update `postageFee` set `aaa`=1,`bbb`=2 where `id`=1; update `postageFee` set `aaa`=3,`bbb`=4 where `id`=5; "; $result = $db->prepare("$sql"); $result->execute; $result->finish; //////////////////////////////////////////// 上記のように複数行にわたるupdate文を一回のQueryで処理させたいのです。 上記のような方法で一回で処理はできないのでしょうか?どうしてもうまくいきません。 1行1行クエリーしないといけないのでしょうか? よろしくお願いします。

    • ベストアンサー
    • CGI
  • MysqlでのLOCK処理

    Mysqlのwebリファレンスの http://dev.mysql.com/doc/refman/4.1/ja/lock-tables.htmlでは --->個々の UPDATE ステートメントでは、いずれも処理が原子的に行われるため、通常、テーブルをロックする必要はありません。現在実行中の SQL ステートメントが、他のスレッドによって妨害されることはまったくありません。しかし、次に示すように、テーブルをロックする必要が生じる場合もいくつかあります。 トランザクションをサポートしていないストレージエンジンを MySQL で使用している場合、SELECT と UPDATE の間に他のスレッドに割り込まれないようにするには、LOCK TABLES を使用する必要がある。次の例では、安全に処理を実行するために LOCK TABLES を発行する必要がある。<--- と説明がありますが、 (1)トランザクションをサポートしていないストレージエンジンでINSERT INTO,DELETE処理をするにはLOCKが必要になってくるのでしょうか? よろしくご教授おねがいします

  • PEAR DBのupdateについて

    PEAR DBにて複数のデータを一度にUPDATEにて更新しようと思っているのですが、うまくいきません。 foreach($data as $value){   $SQL = "update `table_name` set `id` = '" .addslashes($value). "';"; } $res = $this->db->query($SQL); まず、update分をデータ分foreachにて溜め込み、一気にクエリを投げております。insert文の場合はうまく処理してくれるのですが、updateの場合はエラーが返ってきてしまい、処理してくれません。updateの場合、PEAR DBでは不可能なのでしょうか? お分かりになる方、ご教授ください。よろしくお願いいたします。

    • 締切済み
    • PHP
  • mysqlのメモリの開放、DB切断について

    php,mysqlの勉強をしている初心者です。 mysqlのメモリの開放、DBの切断はselect処理をした時だけでよいのでしょうか? 以下の場合がよくわかりません。 -------------------------------------------------------------------------- (1)select処理を行う (2)(1)で行ったselect処理の値を使いinsert処理を行う (3)(2)の後にmysqlのメモリの開放、DBの切断をしようとするとエラーになってしまいます。 -------------------------------------------------------------------------- どなたかお分かりの方がいましたら教えてください。 よろしくお願いします。

  • mysql_queryの処理速度が遅い

    PHP+MySQLでプログラミングをしているのですが、実行時にmysql_queryの処理に時間がかかっています。状況は以下の通りです。 ・処理時間を計測するとmysql_queryの実行に15秒程度かかっています。 ・Webminで直接同じSQL文を実行すると1秒程度で終わります。 ・SQLのコマンドは単純なUPDATEです。 ・indexは設定してあります。 ・DBに格納してあるレコード数は数100件程度です。 ・optimizeは実行してみましたが、あまり効果はありませんでした。 お聞きしたいのはWebminで実行すると1秒程度で終わるSQL文がmysql_queryで実行すると、なぜ時間がかかるのかということです。 mysql_queryで時間がかかる原因およびmysql_queryの処理時間を短縮する方法などがあれば教えてください。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • mysql データベース処理が途中で失敗したら?

    お世話になります。 現在、mysqlのデータベースを使ったphpプログラムを書いているのですが、 以下のように、続けて2つのデータベース処理を記述している部分があります。 $db=connectDb(); //処理1 $st1=$db->prepare("update table1 set title=:title where id=:id1 limit 1"); $st1->execute(array(":title"=>$title,":id"=>$id)); //処理2 $st2=$db->prepare("update table2 set image=:image where id=:id2 limit 1"); $st2->execute(array(":image"=>$image,":id"=>$id2)); db=NULL; ここで質問があります。 このような記述ですとなんらかの理由により、例えば、 「処理1のアップデート処理は成功したが、 次の処理2のアップデート処理には失敗してしまった。」 というような問題は起きることがあるのでしょうか? 起きることがある場合、それに備えてどのような記述をすれば対応できるでしょうか? ご存知の方、ご回答いただければ幸いです。 よろしくお願い致します。

    • ベストアンサー
    • PHP