読者です 読者をやめる 読者になる 読者になる

APC 技術ブログ

株式会社エーピーコミュニケーションズ 先進サービス開発部の公式ブログです。

株式会社 エーピーコミュニケーションズシステム基盤エンジニアリング事業部の公式ブログです。

海を越えてのMySQL準同期レプリケーションの巻

Database Mysql

案件のついでにMySQL準同期レプリケーションを東京とシンガポールでやってみて、性能評価してみました。

 

準同期レプリケーションとはマスター側更新処理のcommit前にデータをスレーブに送ってackが返ってくるのを待って処理するという仕組みです。

なので普通にローカルでcommit(非同期レプリケーション)と比べると、処理が増えるしNWの影響も受ける形になります。

 

それをNW遅延が起こる環境(ex別の国)でやったらどうなの?(つまりNW影響はどの程度?)というのが今回の性能評価の目的です。

 

環境

Linux TOKYO 3.4.43-43.43.amzn1.x86_64 #1 SMP Mon May 6 18:04:41 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux

 

手順

  1. 今回はmysqlslapを使って約1万件の単純なデータを突っ込み時間測定。
  2. 次にmysqlslapを使って約10万件の単純なデータを突っ込み時間測定。
  3. 準同期の環境をつくります。構築手順は割愛。
  4. 東京リージョンをMasterにしたので、東京側でmysqlslapを使って約1万件の単純なデータを突っ込み時間測定。
  5. 同様に東京側でmysqlslapを使って約10万件の単純なデータを突っ込み時間測定。

 

なお1万件の場合は5回、10万件の場合は3回実施した結果のアベレージをとります。

 

結果

Semisyncなし

1万件:68.088 sec

10万件:703.531 sec

 

SemiSyncあり

1万件:83.536 sec

10万件:785.457 sec

 

1万件で約1.2倍、10万件で1.1倍程度の違いが認められました。

当たり前ですが大きめの処理は要注意なものの、個人的には思ったよりはNW影響は受けない?と感じました。

とはいえ検証しているのがMicroなので瞬間によって状況も違うと思われ、一概にはいえませんけども。

そのうち気が向いたら東京リージョンの別サイト間や異なるクラウドでやってみようかと思います。

 

テスト結果のグラフです。クリックすると拡大されます。

f:id:apc-sieg:20130823123633j:plain

 

f:id:apc-sieg:20130823123636j:plain

 

おまけ(mysqlslapのコマンド)

1万件データを突っ込んだとき

mysqlslap --host=localhost --port=3306 --create-schema=mysqlslap -a --no-drop --auto-generate-sql-add-autoincrement --auto-generate-sql-load-type=write --number-int-cols=2 --number-char-cols=2 --auto-generate-sql-secondary-indexes=3 --auto-generate-sql-execute-number=100 --auto-generate-sql-write-number=100 -c 100 -e InnoDB

 

10万件データを突っ込んだとき

mysqlslap --host=localhost --port=3306 --create-schema=mysqlslap -a --no-drop --auto-generate-sql-add-autoincrement --auto-generate-sql-load-type=write --number-int-cols=2 --number-char-cols=2 --auto-generate-sql-secondary-indexes=3 --auto-generate-sql-execute-number=1000 --auto-generate-sql-write-number=1000 -c 100 -e InnoDB

 

※ 終わった後にDropせずにおいておいて、ちゃんと同期しているかは軽く確認もしました。