エキサイト株式会社の武藤です。
オンプレにあるDBを稼働中のRDSに統合する際に、mysqlslapを使った負荷エミュレーションをしたので、使い方を紹介します。
mysqlslapとは
mysqlslapとは、負荷エミュレーションをするコマンドです。クライアントの接続数やクエリ数などを設定して、実行時間を計測してくれます。 dev.mysql.com
mysqlのCLIクライアントをインストールした際に一緒にいくつかの便利コマンドが入っているみたいです。mysqlslapもその一つです。
実行例
75クライアントから75クエリーのUPDATE文の実行を10回繰り返す実行例です。
DB設定
DBホスト : demo_db mysqlユーザ : demo_user mysqlパスワード : demo_password ポート : 3306
mysqlslap \ --no-defaults \ --auto-generate-sql \ --engine=innodb \ --create-schema=demo_schema \ --password=demo_password \ --host=demo_db \ --user=demo_user \ --port=3306 \ --number-char-cols=3 \ --iterations=10 \ --concurrency=75 \ --auto-generate-sql-write-number=10 \ --auto-generate-sql-add-autoincrement \ --auto-generate-sql-load-type=update \ --number-of-queries=75 mysqlslap: [Warning] Using a password on the command line interface can be insecure. Benchmark Running for engine innodb Average number of seconds to run all queries: 1.200 seconds Minimum number of seconds to run all queries: 1.068 seconds Maximum number of seconds to run all queries: 1.371 seconds Number of clients running queries: 75 Average number of queries per client: 1
1回の試行の実行時間の平均が1.200秒、最小値が1.068秒、最大値が1.371秒でした。 このように、パラメータを調整して実行時間を計測します。
設定したオプションの説明です。
--no-defaults : デフォルト値を読み込まない --engine : 使用するストレージエンジン --create-schema : スキーマ --password : DBのパスワード --host : DBのホスト --user : DBのユーザ --port : ポート番号 --iterations : 試行回数 --concurrency : クライアント数 --auto-generate-sql : SQLを自動で生成 --auto-generate-sql-write-number : 各スレッドで実行する行挿入の回数 --auto-generate-sql-add-autoincrement : AUTO_INCREMENT カラムを自動生成されたテーブルに追加 --auto-generate-sql-load-type : テストの負荷タイプを指定 --number-of-queries : 各クライアントのクエリー数の指定 --number-char-cols : --auto-generate-sql が指定されている場合に使用する VARCHAR カラムの数
これ以外にも様々なオプションがありますので、公式ドキュメントを御覧ください。
検証したこと
今回は、オンプレDBからRDSで稼働中のDBに相乗りさせる形で移行を考えていました。その場合、オンプレDB分の負荷がRDSにそのままかかってきますので、それに耐えられるかを検証しました。
まずは、オンプレDBにかかっている負荷をzabbixから確認しました。それを基にmysqlslapでRDSに負荷をかけて、実行時間を確認していきました。最終的には、zabbixで確認した負荷より大幅に高い負荷をかけても実行時間が十分に短かったので、移行しても耐えられると判断しました。
そして、実際にRDSへ統合してCloudWatchで負荷を確認したところ、詰まることなく捌けていました。
事前に負荷検証をすることで、安全にDB移行ができました。
最後に
オンプレDBのAWS移行にあたって、RDSに対して負荷検証をしてみました。 mysqlslapで簡単に負荷検証ができるので、ぜひ使ってみてください。