はじめに

はじめまして。株式会社スマートスタイルの中野と言います。
普段は、MySQLを中心としたオープンソースDBのコンサルティングやサポートをしています。
先日、さくらインターネット様が提供する「さくらの専用サーバ*1」を触らせて頂く
機会がありましたので、そこで実施したベンチマークの結果を共有したいと思います。

*1 サーバ1台を占有して利用できるホスティングサービス → さくらの専用サーバー

検証環境

今回ベンチマークを実施した環境は以下の通りです。

【対象1:さくらクラウドA】

一般的なDBサーバをイメージした環境です。

■DBサーバ
CPU 36core vCPU
MEM 128GB
Disk SSD 1TB
OS CentOS 6.9
■計測サーバ
CPU 8core vCPU
MEM 32GB
Disk SSD 20GB
OS Ubuntu 16.04

【対象2:専用サーバ】

今回は「PCIe Flashストレージ」も使っています。

■DBサーバ
CPU 40core vCPU
MEM 256GB
Disk PCIe Flash 1.6 TB
OS CentOS 6.9
■計測サーバ
CPU 8core vCPU
MEM 32GB
Disk SSD 20GB
OS Ubuntu 16.04

使用するツール、DBMS

今回はベンチマークツールとして Sysbench 1.0(※)の最新版を利用しています。
さくらのクラウドには、MySQL 5.7.18 をインストールしています(テスト実施当時の最新版)。
また、MySQLのデータのバックアップ・リストアツールとして Percona XtraBackup 2.4.8 を
利用しています。

※ Sysbenchは現在、Percona社が引き継いで開発を続けていて最新版はGitHubで公開されています
Sybench1.0のGitHubリポジトリ

検証の手順

おおよそ以下のような手順でベンチマークを実施しました。

1. Flashストレージのマウント、カーネル設定の変更(専用サーバのみ)
2. DBサーバに MySQL5.7.18 と Percona XtraBackup2.4.8 をインストール
3. 計測サーバに Sysbench 1.0 をインストール
4. Sysbenchのデータロード実行
5. XtraBackupで全体バックアップを取得
6. ベンチマーク用のmy.cnfを設定
7. Sysbenchのベンチマークを実行
8. MySQLを停止し、XtraBackupの全体バックアップをリストア
9. 6.に戻る

なお、4.で取得したバックアップをその他のDBサーバにも展開し、各ベンチマーク試験で同じデータを使用するようにしています。
詳細な手順、設定については以下の記事に記載しています。

※さくらのクラウドの検証手順解説 … さくらの専用サーバでベンチマークを実施してみた ~ 手順編 ~

DBのパラメータ設定

いくつかMySQL側のパラメータ変数に変更を加えています。

  • query_cache_type=OFFに変更
    → クエリキャッシュによる高速化を防ぐため
  • innodb_buffer_pool_size=64Gに変更
    → sysbenchのデータサイズよりもバッファプールサイズを小さくしてI/Oバウンドにするため
  • performance_schema=ONに変更
    → MySQL5.7以降では有効になるのが標準的のため
  • back_log=1500に変更
    → sysbenchに同時接続数に耐えるため
  • max_prepared_stmt_countに変更
    → sysbenchが発行する大量の prepared_statement に耐えるため

専用サーバ、クラウドサーバ両方で同じ my.cnf ファイルを使用しています(datadirのパスなどは変更)。実際に使用したファイルは、上で紹介した記事に掲載しています。

検証結果

テストの結果、sysbenchによるスコアは以下のようになりました。
なお、テストは2回実施し、その平均値を最終スコアとしています。

  • 接続数 … sysbench の –threads オプションでした、並列接続数
  • TPS … Transaction Per Second(1秒あたりのトランザクション数)
  • QPS … Query Per Second(1秒あたりのクエリ数)

【対象1:さくらのクラウド】

接続数 TPS QPS
8 255.31 5106.22
16 370.28 7405.55
32 468.8 9375.92
64 500.93 10018.62
128 447.88 8957.52
512 673.66 13473.27

【対象2:専用サーバ】

接続数 TPS QPS
8 671.31 13426.15
16 1079.94 21598.70
32 1081.93 21638.68
64 1292.79 25855.69
128 1325.17 26503.31
512 1351.71 27034.18

まとめと所感

同一のパラメータ/テーブルデータ および 同等スペックのDBサーバ/計測サーバ を用いた場合、やはり専用サーバの方が2~3倍のスコアが出ました。

ただし、専用サーバで使用しているFlashストレージが高速すぎる影響で今回お借りした環境ではネットワークがボトルネックになってしまい、スコアが伸び悩むという事象も
発生してしまいました。構成の変更などでこのネック部分を解消できれば、より高いスコアが期待できると思います。

また、今回は各ベンチマークを2回ずつ実行しましたが、クラウドサーバの方はスコアが多少上下することがあったものの、専用サーバの方はスコアが安定していました。クラウドサーバ側はパブリッククラウドである一方で、専用サーバはリソースを占有できるため
パフォーマンスの安定性と言う点でも優れているように感じました。

最後に、sysbenchを計測サーバからでなく、DBサーバのローカル上で実行した場合のスコアは以下のようになりました。

接続数 TPS QPS
8 892.59 17851.80
16 1472.12 29442.30
32 2383.91 47678.21
64 5603.33 112066.64
128 8076.60 161532.25
512 7404.94 148099.30

512同時接続で秒間14万8千クエリーとかなり高いスコアを記録しました。「高速で安定した性能が出るMySQLが欲しい」という要求に「さくらの専用サーバ」は応えてくれそうです。

最後に

弊社スマートスタイルの技術ブログでは AWS の Aurora(MySQL) でベンチマークを実施しています。もし興味があればこちらの記事も参考にしてください。

RDS for Auroraのハイエンドインスタンスでベンチマークを実行してみた