JMeterからDocker版 SQL Serverに繋ぐ

## この記事で行うこと

~~Javaなんもわからん~~

- Dockerに建設した**Microsoft SQL Server 2019**の**負荷テスト**をしたい
- 負荷をかけるツールとして**JMeter**を使いたい

今回は、**JMeterからSQL Serverへ接続するところまで**を行う。
まずは通信できるところまで。

実際に負荷をかけてみるのは次回！

### 検証環境

OSは**Windows 11 Home**を使う。Not Mac...

Javaは1.8系らしい。この意味は知らない。

```bash:java -version
java version "1.8.0_371"
Java(TM) SE Runtime Environment (build 1.8.0_371-b11)
Java HotSpot(TM) Client VM (build 25.371-b11, mixed mode)
```

#### SQL Server 2019 コンテナ

[DockerにSQL Serverコンテナが起動している](https://qiita.com/t13801206/items/4c2e85fc2732c4de5533)ものとする。
※その過程についてはリンク先の記事を参照

- SQLサーバの待ち受けポートは`11433`　※`1433`ではない
- `sa`というユーザーが`Passw0rd`というパスワードでログインできる
- `TestDB`というデータベースがすでに存在する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272511/97260d1e-62a2-2f5b-7c6b-a9c9e70c864e.png)

（[SSMS](https://learn.microsoft.com/ja-jp/sql/ssms/download-sql-server-management-studio-ssms?view=sql-server-ver16)でログインしたキャプチャ）

## JMeterを入手する

JMeterはSQLサーバーに対して、負荷をかけるためのツール
公式サイトに文字がたくさん並んでいて、いかにも老舗のツール感が出ている

[Apache JMeter 5.5 (Requires Java 8+)](https://jmeter.apache.org/download_jmeter.cgi)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272511/ed514db4-beb9-987f-d90c-874dd7367e9b.png)

ZIPファイルを適当なところ（デスクトップとか）に展開する
展開すると、拡張子`.zip`が取れたフォルダーが１つ出来上がる

**以後、`apache-jmeter-5.5`の中が作業場所となる**

## JMeterを起動する

`apache-jmeter-5.5\bin\jmeter.bat`をダブルクリックすれば起動する

黒い窓が起動したあとに、JMeterが起動する
黒い窓にはログが表示されるので、邪魔にならないところに寄せておく

## SQLサーバーへアクセスするためのライブラリ

`apache-jmeter-5.5\lib`の中に`.jar`（Javaアーカイブ）ファイルを置く
`.jar`ファイルはマイクロソフトのHPから入手できる

### Java `1.8` に対応するライブラリは何？

[こちらの対応表](https://www.ne.jp/asahi/hishidama/home/tech/java/version.html#h_class_version)によると、**52**という数字が対応するらしい
では、[Javaからデータベースへアクセスするためのライブラリ(JDBC)](https://www.microsoft.com/ja-JP/download/details.aspx?id=57175)をダウンロードしよう

### どの`.jar`を使えばいい？

JDBCを解凍すると、`.jar`ファイルが2つあった！

1. `Microsoft JDBC Driver 7.0 for SQL Server\sqljdbc_7.0\jpn\mssql-jdbc-7.0.0.jre8.jar`
2. `Microsoft JDBC Driver 7.0 for SQL Server\sqljdbc_7.0\jpn\mssql-jdbc-7.0.0.jre10.jar`

#### まずは`jre10`を入れてみた

`apache-jmeter-5.5\bin\jmeter.bat`をダブルクリックしてJMeter起動する
JMeter側でいろいろ設定して、いざ実行すると、黒窓に文字列がずらりと・・・ダメな感じ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272511/4d1cd1b2-8019-da5a-5a9c-e33777677cad.png)

黒窓：**「`52`が要るのに`54`を使ってないかい？」**（意訳）

マイナス２する必要があるので、*jre10 - 2 = jre8* に変更
`apache-jmeter-5.5\lib`に`mssql-jdbc-7.0.0.jre8.jar`を入れた　--- *jre10*はゴミ箱へ

## JMeterの設定

何はともあれ、まずは[日本語化しておく](https://qiita.com/gtom7156/items/92aab9185c5b7d5feda9)

最初は`TestPlan`しか表示されていないので、右クリック「追加」をして部品を足していく

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272511/48fe094a-6f7c-5ce3-a007-70493097580c.png)

右クリック、追加、部品を探す・・・を繰り返すと、キャプチャのようなツリーがいずれ完成する

### Thread Group

とりあえず適当な数字
あまりループすると終わらないので、まずは小さめの数字がよい

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272511/f6cdf428-63fd-2c9a-0e04-9657ed07808e.png)

:::note info
画像内の赤印部分は自分で変えるところ。他は最初から入力されている文字・数字のまま。
:::

### JDBC Request

JDBCコンフィグは`con1`とする。コンフィグはこのあと作る。

クエリは`SELECT @@VERSION`とする。
今回は、通信できていることを確認したいので、クエリはなんでもよい（から参考サイトと同じにした）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272511/c11ee949-64d9-4ab4-f27c-1e1b1159d462.png)

### JDBC Connection Configuration

JDBCコンフィグは`con1`とする。先につくった *JDBC Request* と合わせる。

- Database URLは`jdbc:sqlserver://localhost:11433;database=TestDB`
- JDBC Driver Classは`com.microsoft.sqlserver.jdbc.SQLServerDriver`

ユーザーネームとパスワードは、`sa`/`Passw0rd`（Docker構築時に指定したもの）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272511/88ff3571-fbf8-dd0d-1611-51cf881937f4.png)

### いざ、実行！

緑色の三角マークを押せば、JMeterが動き出す

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272511/272eae7d-cc32-f86a-ae21-4887d40f1251.png)

## SQL Serverのログを確認する（通信できているか？）

SSMSにログインして、左のツリーから *XEvent Profiler → Standard* を選ぶ
JMeterを実行した結果（`SELECT @@VERSION`, `JDBC Driver`など）が表示され
**たしかにJMeterからDockerコンテナSQL Serverへアクセスしていることがわかる**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272511/d494cd29-cac3-b95e-c1c6-d2ea0d136e5b.png)

## まとめ

今回は*JMeter*が使える環境を整えて、SQLサーバーと繋がるところまで確認した

次回は実際に負荷をかけてみて、SQLサーバーがどう反応するかをみる

## 参考

https://blog.engineer-memo.com/2018/09/01/jmeter-%E3%81%A7-sql-server-%E3%81%AE%E8%B2%A0%E8%8D%B7%E3%83%86%E3%82%B9%E3%83%88-2018-08-%E7%89%88/

## 糸冬了！！