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

このQ&Aのポイント
  • MySQLのレプリケーションにおけるマスターへの負荷増大とレプリケーション遅延について調査します。
  • マスター1台でスレーブ10台のサーバへレプリケーションを行う場合のマスターへの負荷とレプリケーション遅延を検証します。
  • MySQLのバージョンは5.5.15で、1日のページビューは500万PV、同時アクセス数は200です。selectとinsert,updateの比率は同じくらいです。
回答を見る
  • ベストアンサー

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

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

  • MySQL
  • 回答数2
  • ありがとう数2

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

  • ベストアンサー
  • kuroizell
  • ベストアンサー率55% (95/170)
回答No.1

レプリケーションが有効なのは、更新が少なく参照が多い時です。 たとえばMySQL公式のレプリケーションFAQを見ると、 パフォーマンスの計算を更新1:参照9で行っています。 更新1:参照1のような場合は、スレーブを増やすより、 MySQL ClusterかSpiderエンジンの導入を考えた方が良いように思います。

bakenshibakenshi
質問者

お礼

早速のご回答ありがとう御座います。 MySQL Clusterを詳しく知らないので調査してみます。 ご教授ありがとうございました。

その他の回答 (1)

  • nora1962
  • ベストアンサー率60% (431/717)
回答No.2

ネットワークの帯域が確保されているならマスターの更新負荷(CPU、I/O)よりも相対的に軽いと思います。スレーブ側で更新が追いつかない時の挙動に一抹の不安が残りますが。

bakenshibakenshi
質問者

お礼

ご回答ありがとうございます。 はい、スレーブの更新遅延はひどい時だと1分くらいあります。 やっぱりスレーブは少ない方がよいのでしょうか。。。

関連するQ&A

  • トリガが設定されたMySQL5.5準同期

    MySQL5.5の準同期レプリケーションを使って、マスターサーバー(insert用)とスレーブサーバー(select用)を組み合わせたサイトを作る予定です。 マスター側のサイトはトリガーとイベントを多用しております。(トリガー13個、イベント8個) 当初、マスター側にもスレーブ側にもどちらにもトリガーとイベントを組み込んでいましたが、テストして分かったことは、イベントがエラーを起こすということでした。 マスター側でイベントが始まり結果をスレーブ側に送ることになるわけですが、同時間にスレーブ側のイベントも始まるわけなので、マスターの結果が送られてきたときにはスレーブのテーブルには計算後の数値が記載されており、結果エラーになってしまうことがわかりました。 そのため、スレーブ側のイベントは削除して構築しています。 問題はトリガーについてです。 マスター側にはAテーブルにインサートするとBテーブル、Cテーブル、Dテーブルが連鎖的に変更されるトリガを組んでおり、スレーブ側も同様のトリガを組んでいます。 幸い、いままでのテストでは、トリガーで計算した値が連鎖的に伝わってもエラーになっていません。 ただ、マスター側に高負荷が掛かり、マスターのトリガの計算よりもスレーブ側の計算のほうが早く終了した場合、イベントの時に起こったエラーが出ないか懸念しています。 テストで壊れるのはいいですが、実際に運用した後で壊れることは許されません。 質問としては、「実際にトリガーを使った高負荷サイトを構築されている方でスレーブサーバーを準同期で設定している方」から、どのように組めばよいかのアドバイスを頂きたいというものです。(こんな高負荷サイトで運用しているがトリガを組んでて問題ないなどという例があるとうれしいです) よろしくお願いいたします。 スレーブのトリガーを外すのが一番簡単な方法なのですが、万一マスターがハングアップした際にはスレーブを昇格させる予定ですので出来る限りトリガーはそのままにしたいと考えておりますが、スレーブ側にトリガを組んだままというのは常識的にあり得ないというアドバイスであればそれでも結構です。 これはお願いなのですが、「他のサイトを調べて回答する」という方は申し訳ございませんがご遠慮願います(私も簡単なテストは済ませており低負荷では問題が生じないことまでは分かっております。ブログに落ちているような経験値はこれと大差ありません。この程度ではアドバイスにならないと感じています。) 実際に運用経験があり、正確な知識をお持ちの方にアドバイス頂きたいと思います。 よろしくお願いいたします。 構成はCentOS 6.3 MySQL 5.5.28です。

    • ベストアンサー
    • MySQL
  • MySQLで複数のマスターの受けは可能でしょうか?

    最近MySQLをちょこちょこ触っているものですが、ふとした疑問にぶち当たりました。 もし、ご存じの方がいらっしゃいましたらご教授頂けないでしょうか? 質問 AというMySQLマスターServer BというMySQLスレーブServer があり、お互いにレプリケーションの関係を築いております。 ここに、突然 全く別のデータが入っている CというMySQLマスターServerの受け皿としてBをスレーブに出来ますでしょうか? つまり、B(MySQLスレーブServer)はAのスレーブでもあり、Cのスレーブでもある。 ということが出来るのでしょうか? (出来る、出来ないで結構です、やり方などのご教授はいりません。) MySQLにお詳しい方いらっしゃいましたらアドバイス頂けないでしょうか? よろしくお願い致します。

    • ベストアンサー
    • MySQL
  • MySQL の冗長化について

    お世話になります。 MySQLの冗長化について質問です。 現在新規サービスを立ち上げるためにインフラの導入を 検討しています。 求められている要件として、 ・24時間無停止(計画停止はあり) ・障害発生時のフェイルオーバー時間は10分以内 ・冗長化構成(遠隔地を含んだ冗長化は行わない) があります。 MySQLではシングルマスタレプリケーションを使用することで 参照系DBのスケールアウトは可能ですが、 更新系DBの冗長化を行うにはマルチマスタレプリケーションを 行う必要があると認識しています。 とはいえ、マルチマスタレプリケーションにて冗長化を行うと、 アプリ側での作りこみやリカバリを考えると頭の痛いことが 多いように感じています。 単一障害点となるマスタDBの冗長化を行うにはどのような 方法を使えば安価かつ可用性・拡張性を得ることが可能でしょうか。 (負荷分散には目をつぶる前提です) ※基本的には作りこみではなくソフトウェアでの解決を考えています。  また、Oracleを視野に入れると導入コストが跳ね上がるので  考えないものとしています。 お勧めの製品・方法があれば情報をいただけないでしょうか。 宜しくお願いします。 

  • レプリケーション

    MySQLでスレーブ・マスターの設定をしてレプリケーションができたと思いますが、サーバ等がダウンした際にスレーブ・マスターの関係を逆転させること(今までスレーブだったのをマスターにして、マスターをスレーブに)は出来ますか? 2台のWEBサーバにそれぞれDBが乗っかっていて、マスターサーバがダウンした際にはDBも切り替えを行いたいのですが・・・ よろしくお願いします。

    • ベストアンサー
    • MySQL
  • SFTPで/var/lib/mysql/にPUT

    MySQL5.5でレプリケーション(準同期)を構築しています。 http://it.sifr.me/mysql-semi-synchronous-replication/ 上記のサイトを参考に、マスターサーバー(192.168.100.101)からスレーブサーバー(192.168.100.105)にレプリケーションの予定です。 上記サイトをもとに構築していたのですが、レプリケーションの前の段階の 「SFTPで/var/lib/mysql/に接続、PUT」するという単純なことが出来ません。 下記のように192.168.100.101にあるSQLをスレーブサーバー192.168.100.105にSFTPで接続してPUTするという作業をしたころ Couldn't get handle: Permission denied になってしまっています。 [root@sv1 ~]# cd /var/lib/mysqll      //192.168.100.101のマスターサーバー上でcd [root@sv1 mysql]# sftp -oPort=22 replica@192.168.100.105 //スレーブに接続 Connecting to 192.168.100.105... replica@192.168.100.105's password: sftp> cd /var/lib/mysql      //192.168.100.105のスレーブサーバー上でcd sftp> put master-mysql-data.tar.gz   //192.168.100.105のスレーブサーバーにput Uploading master-mysql-data.tar.gz to /var/lib/mysql/master-mysql-data.tar.gz Couldn't get handle: Permission denied  //エラー sftp> 現在のユーザー設定は以下の通りです。 ユーザー名はいずれも replica で 192.168.100.101(マスター) ●linuxユーザー(ユーザー名 replica) ●mySQLユーザー(ユーザー名 replica)    ホスト192.168.100.105 スレーブレプリケーションの許可 192.168.100.105(スレーブ) ●linuxユーザー(ユーザー名 replica)(グループ mysql) ●mySQLユーザー(ユーザー名 replica)     ホスト192.168.100.101    スレーブレプリケーションの許可&クライアントレプリケーションの許可 と設定しています。 尚、PUT先の192.168.100.105 の/var/lib/mysql/の所有者はユーザー、グループともmysqlです。 mysqlユーザーで行えばput可能のでしょうが、どのサイトを見てもreplication専用ユーザーを作って対応することとなっており、安全上の面からも機能限定のユーザーでputしたく考えております。 対応方法についてご教授いただきたくお願いいたしします。

    • ベストアンサー
    • 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
  • 大量同時並行処理時のMySQL

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

    • ベストアンサー
    • MySQL
  • mysqlにてinsertした件数を取得

    phpからmysqliを利用してmysqlに Insert XX select … の様な形でinsertを行いたいのですが、 この時、insertした件数が必須なのですが、 selectをもう一回発行するのも無駄が気がしており、 insertしながら件数を取得する事は可能でしょうか? 知識不足で恐縮では御座いますが、 何卒宜しくお願い致します。

  • 複数のマスタとのレプリケーションは可能でしょうか?

    MySQL5.0を使用して下記の事が可能なのか教えて頂けないでしょうか? ■実現したい事 当方の支店に設置したサーバにはMySQLが導入されており、日々の業務データを保持しています。 また、支店は複数あり同じデータベース構造となっています。 そこで、本店にも1台のサーバを設定し、これにMySQL導入し各支店のMySQLとレプリケーション機能を用いてバックアップを行いたいのです。 支店で保持している各テーブルには支店IDをキーとして持っているので、各支店のデータをまとめても重複は発生しません。 ネットでレプリケーション機能の説明を読んだのですが、複数のマスタとスレーブを設定する例を見つけられなかったので質問させて頂きました。 以上、よろしくお願いします。

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

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