Amazon-RDS

HammerDBでRDS SQL Serverを叩く。【初心者向け】

はじめに

HammerDBを触ったのですが、忘れかけていたことが何度かあったので少しだけまとめてみたいと思います。
この記事では以下の手順を紹介していく予定です。

  1. HammerDBの導入
  2. HammerDBの設定
  3. RDS SQL Serverに負荷をかける
  4. AWSコンソールから確認

よろしくお願いします。

HammerDBとは

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 Files\HammerDB-X.X内のhammerdb.batでCLI、hammerdbcli.batでGUI版のHammerDBを起動できます。
今回はCLI版で進めさせていただきます。

RDSの設定を確認する

RDSの設定から拡張モニタリングPerformance Insightsを有効にすることでサーバに手を加える手間なしで負荷を細かく確認できます。

拡張モニタリングはCPUがどのように使われているか、などをOSレベルのデータをリアルタイムで確認できます。
SQL Serverの場合メトリクスがデフォルトで8種類表示されていますが、グラフの管理から設定を変更すると最大28種類のメトリクスデータを表示することができます。
取得できる詳細なデータは下記リンクを参考にしてみてください。

Enhanced Monitoring の概要

対してPerformance InsightsはRDSにあまり負荷をかけずにSQL内部処理の負荷や情報を確認できます。
画像ではボトルネックになっているSQL文が一目瞭然かもしれないです。

HammberDBの設定

スキーマ、ドライバー、バーチャルユーザを設定します。

スキーマの準備

データベースを設定します。

hammerdb>dbset db mssqls
Database set to MSSQLServer

ベンチマークの種類を選びます。

hammerdb>dbset bm TPC-C
Benchmark set to TPC-C for MSSQLServer

接続先の設定をします。
RDSのエンドポイントを入力します。

hammerdb>diset connection mssqls_server blog-sqlserver2017.hogehoge.ap-northeast-1.rds.amazonaws.com
Changed connection:mssqls_server from (local) to blog-sqlserver2017.hogehoge.ap-northeast-1.rds.amazonaws.com for MSSQLServer

サーバの認証モードをsql認証にしてユーザ名とパスワードを設定します。

hammerdb>diset connection  mssqls_authentication  sql
Changed connection:mssqls_authentication from windows to sql for MSSQLServer

hammerdb>diset connection  mssqls_uid admin
Changed connection:mssqls_uid from sa to admin for MSSQLServer

hammerdb>diset connection  mssqls_pass YOURPASSWORD
Changed connection:mssqls_pass from admin to YOURPASSWORD for MSSQLServer

テストに使用するデータベース名を設定します。
既に存在するものを被らないよう注意です。

hammerdb>diset tpcc mssqls_dbase tpcc_denet
Changed tpcc:mssqls_dbase from tpcc to tpcc_denet for MSSQLServer

print dictで設定した項目を確認できます。

hammerdb>print dict
Dictionary Settings for MSSQLServer
connection {
 mssqls_server         = blog-sqlserver2017.hogehoge.ap-northeast-1.rds.amazonaws.com
 mssqls_linux_server   = localhost
 mssqls_tcp            = false
 mssqls_port           = 1433
 #...省略

スキーマビルド

hammerdb>buildschema

Script cleared
Building 1 Warehouses(s) with 1 Virtual User
Ready to create a 1 Warehouse MS SQL Server TPROC-C schema
in host BLOG-SQLSERVER2017.HOGEHOGE.AP-NORTHEAST-1.RDS.AMAZONAWS.COM in database TPCC_DENET?
Enter yes or no: replied yes
Vuser 1 created - WAIT IDLE
Vuser 1:RUNNING
Vuser 1:CREATING TPCC_DENET SCHEMA
Vuser 1:CHECKING IF DATABASE tpcc_denet EXISTS
Vuser 1:CREATING DATABASE tpcc_denet
#~~~~
#省略
#~~~~
Vuser 1:FINISHED SUCCESS
ALL VIRTUAL USERS COMPLETE

無事に実行できました。

[Microsoft][ODBC Driver 17 for SQL Server]Login timeout expired
[Microsoft][ODBC Driver 17 for SQL Server]A network-related or instance-specific error has occurred while establishing a connection to SQL Server. Server is not found or not accessible. Check if instance name is correct and if SQL Server is configured to allow remote connections. For more information see SQL Server Books Online.

などが表示される場合はSQLサーバに接続できていないので、セキュリティグループ等のネットワークの設定を見直すとよいかもしれないです。

ドライバーの設定

実行するワークロードのタイプを設定します。
testtimedがありますが、公式では後者が強く推奨されているためそちらを選びます。

hammerdb>diset tpcc mssqls_driver timed
Clearing Script, reload script to activate new setting
Script cleared
Changed tpcc:mssqls_driver from test to timed for MSSQLServer
hammerdb>loadscript
TPC-C Driver Script
Script loaded, Type "print script" to view

バーチャルユーザの設定

バーチャルユーザを設定します。基本的には少しずつユーザ数を増やしていくものだと思います。

hammerdb>vuset vu 4

hammerdb>vucreate
Vuser 1 created MONITOR - WAIT IDLE
Vuser 2 created - WAIT IDLE
Vuser 3 created - WAIT IDLE
Vuser 4 created - WAIT IDLE
4 Virtual Users Created with Monitor VU
hammerdb>vustatus
1 = WAIT IDLE
2 = WAIT IDLE
3 = WAIT IDLE
4 = WAIT IDLE

HammerDB実行

vurunで実行します。

hammerdb>vurun
Vuser 1:RUNNING
Vuser 1:Beginning rampup time of 2 minutes
#~~~
#省略
#~~~
Vuser 1:FINISHED SUCCESS
ALL VIRTUAL USERS COMPLETE

無事に完了しました。
実行後、バーチャルユーザなどの削除もしておきます。

hammerdb>vudestroy
vudestroy success

hammerdb>clearscript
Script cleared

コンソール画面から負荷を確認する

ちゃんと負荷がかかっていたかAWSコンソールからも確認してみます。

拡張モニタリング

PerformanceInsights


おわりに

RDSのデータベースにHammerDBを使ってみました。
少しまとまりがないかもしれないですが、もしも何か参考になる点があれば幸いです。

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA