MySQLレプリケーションの速度はどれくらいですか?


19

mysql dbのレプリケーションを設定して、各ブランチオフィスにローカルスレーブを配置し、メインオフィスにマスターを配置してブランチオフィスのアプリケーションのパフォーマンスを(大幅に)改善することを検討しています。

db自体はそれほど大きくありません(1GB未満)が、疑問に思っています。200〜300レコードの更新/分を考慮:レプリケーションの速度は?(最初に、必要に応じて5MBの汎用dsl接続を高速化すると仮定します。可能な限りコストを低く抑えようとしますが、お金はもっとあります)

テーブル全体がバッチで複製されますか?テーブル内の各レコードが更新されると、レプリケーションはオンデマンドで行われますか(ドキュメントから、構成可能であることがわかりました)。

ノート:

  • 私は、1つのマスター、2つのスレーブ(現時点では2つのブランチオフィス)がウェブクライアントではなくアプリであることを除いて、ここのドキュメントのようにセットアップすると考えています
  • マスターで行われた更新は、10分以内に他のスレーブに複製する必要があります。
  • このすべては、スレーブから読み取り、マスターに書き込むという概念に私たちのORM(DevExpress XPO)が満足できることを前提としています。

回答:


21

MySQLレプリケーションは、ディスクおよびネットワークI / Oによって制限される限り、可能な限りリアルタイムに近い状態で行われます。スレーブはマスターへのソケットを開き、マスターは開いたままになります。マスターでトランザクションが発生すると、binlogに記録され、スレーブで単純に再生されます。マスターとスレーブ間のソケットが中断された場合、次の正常な接続時にスレーブのバイナリログが再生されます。

マルチマスターレプリケーションは同じことを行いますが、双方向です。

いくつかの基本的な計算は、帯域幅のニーズをより適切に判断するのに役立ちます。

Average transaction size * number of slaves * updates/minute = bandwidth needed

お役に立てれば。


4

スレーブ側のレプリケーションは、2つの独立したスレッドによって処理されます。

  • マスターに接続するログリーダープロセスは、各データ変更ステートメントを受け取り、リレーログに書き込みます。
  • リレーログから新しいアイテムを取得するsqlライタープロセスは、スレーブデータベースでステートメントをコミットし、そのステートメントを超えてスレーブポインターを移動して、クエリの受信を示します。

レプリケーションのレイテンシはIOによって制限されます。まず、スレーブデータベースのIOがリレーログからトランザクションを適用し(複雑なSQLクエリが含まれる場合があります)、次にマスターのIOがバイナリログを読み取って各スレーブに送信します。

MySQLレプリケーションにより、読み取りクエリの容量増加しますが、クエリの書き込みパフォーマンス向上しません。これは、マスターとスレーブの両方でIOがbinlogにフラッシュできる速度でゲートされます


3

MySQLでのレプリケーションは、データをスレーブに取得するのが非常に迅速です(UPDATEマスターで実行でき、別のウィンドウに切り替えてSELECT、スレーブで実行できる場合よりも高速です)(およびその場合のみ)ネットワーク接続がすべて起動し、すべてが正常に実行されています。通常の小規模なクエリの一般的なケースでは、DSLクラス接続は問題ありませんが、大規模な挿入/更新クエリはコピー、レプリケーションの問題が発生した場合の再同期、およびMySQLの悪質な傾向がありますそれらは、残念ながら)しばらくかかります(データベース全体をマスターから再度コピーします)。マスターへの再同期の影響を制限するためのトリックがあります。たとえば、LVMにMySQLを配置して、非常に迅速なロック/スナップショットを実行し、スナップショットの内容をスレーブにrsyncできるようにします。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.