目次
はじめに
HammerDB という負荷テストツールを使ってAWSのRDSで作成したSQL Serverに負荷をかけてみたいと思います。その後、実際に負荷がかかっているかどうかをRDS Performance Insightsや拡張モニタリング等を使用して確認してみます。
HammerDBとは
データベースの負荷テストやベンチマークを行うためツールです。
Githubにてオープンソースで開発されており、Linux、Windows環境で無料で使用できます。
また以下のデータベースをサポートしていて、Amazon AuroraやRedshiftといったAWSサービスも含まれています。
What databases does HammerDB support?
HammerDB currently supports Oracle, SQL Server, Db2, TimesTen, MySQL, MariaDB, PostgreSQL, Greenplum, Postgres Plus Advanced Server, Amazon Aurora and Redshift. HammerDB also includes deprecated workloads for Redis and Trafodion.
https://www.hammerdb.com/about.html
今回使用した環境
HammerDBをインストールしたEC2インスタンスでRDSに負荷をかけます。
バージョンなどは下記の通りになっています。
バージョン | |
---|---|
HammerDB | 4.2 |
EC2 | Windows_Server-2016-Japanese-Full-Base-2021.09.15 |
RDS | SQL Server 2017 Express Edition |
事前準備
HammerDBの導入
公式サイトからダウンロードすることができます。
インストール後、C:Program FilesHammerDB-X.X
内のhammerdb.bat
でCLI、hammerdbcli.bat
でGUI版のHammerDBを起動できます。
今回はCLI版で進めさせていただきます。
RDSの設定を確認する
RDSの設定から拡張モニタリング
とPerformance Insights
を有効にすることでサーバに手を加える手間なしで負荷を細かく確認できます。
拡張モニタリングはCPUがどのように使われているか、などをOSレベルのデータをリアルタイムで確認できます。
SQL Serverの場合メトリクスがデフォルトで8種類表示されていますが、グラフの管理
から設定を変更すると最大28種類のメトリクスデータを表示することができます。
取得できる詳細なデータは下記リンクを参考にしてみてください。
対してPerformance InsightsはRDSにあまり負荷をかけずにSQL内部処理の負荷や情報を確認できます。
画像ではボトルネックになっているSQL文が一目瞭然かもしれないです。
HammberDBの設定 : スキーマ
データベースを設定
負荷をかける対象のデータベースのサービスを選びます。
hammercli>dbset db mssqls
ベンチマークの設定
ベンチマークの種類を選びます。
検証で具体的な用途等はないため、とりあえずTPC-Cを設定します。
hammercli>dbset bm TPC-C
接続先の設定
今回はRDSに負荷をかけるのでRDSのエンドポイントを入力します。
hammercli>diset connection mssqls_server blog-sqlserver2017.hogehoge.ap-northeast-1.rds.amazonaws.com
ユーザ名とパスワードを設定します。
対象SQLサーバなのでsql認証にしました。
hammercli>diset connection mssqls_authentication sql
hammercli>diset connection mssqls_uid admin
hammercli>diset connection mssqls_pass PASSWORD
テストに使用するデータベース名を設定します。
既に存在するものを被らないよう注意です。
hammercli>diset tpcc mssqls_dbase tpcc_denet
設定項目の確認
hammercli>print dict
HammberDBの設定 : スキーマビルド
先ほど設定したものでスキーマを作成します。
hammercli>buildschema
ビルドに失敗する場合
[ODBC Driver 17 for SQL Server]A network-related or instance-specific error has occurred while establishing a connection to SQL Server.~~
この場合SQLサーバに接続できていないので、セキュリティグループ等のネットワークの設定を見直すとよいかもしれないです。
HammberDBの設定 : ドライバー
実行するワークロードのタイプを設定します。
test
とtimed
がありますが、公式では後者が強く推奨されているためそちらを選びます。
hammercli>diset tpcc mssqls_driver timed
設定を読み込みます。
hammercli>loadscript
HammberDBの設定 : バーチャルユーザ
バーチャルユーザを設定します。基本的には少しずつユーザ数を増やしていくものだと思います。
バーチャルユーザの作成
hammercli>vuset vu 2
hammercli>vucreate
Vuser 1 created MONITOR - WAIT IDLE
Vuser 2 created - WAIT IDLE
2 Virtual Users Created with Monitor VU
バーチャルユーザの状態を確認
hammercli>vustatus
1 = WAIT IDLE
2 = WAIT IDLE
HammerDB実行
vurunで実行します。
hammercli>vurun
Vuser 1:RUNNING
#~~~
#省略
#~~~
Vuser 1:FINISHED SUCCESS
ALL VIRTUAL USERS COMPLETE
無事に完了しました。
実行後、バーチャルユーザなどの削除もしておきます。
hammercli>vudestroy
vudestroy success
hammercli>clearscript
Script cleared
AWSコンソールから負荷を確認
ちゃんと負荷がかかっていたかAWSコンソールからも確認してみます。
拡張モニタリング
PerformanceInsights
おわりに
RDSのデータベースに負荷をかけて、そのあとコンソールから確認してみました。
諸事情で文章を大幅に削ったため見づらいかもしれないですが、もしも何か参考になる点があれば幸いです。