sysbencnでMySQLに負荷をかけるメモ

Cloud9からAurora MySQLにsysbenchで負荷をかけるメモ。

DevOps Guru for RDSで何らかのインサイトを出したいがために実施。

参考リンク

手順

Cloud9からAuroraに接続できるようにする。セキュリティグループの設定を忘れずに。

Admin:~/environment $ ENDPOINT=<エンドポイント>
Admin:~/environment $ mysql -h ${ENDPOINT} -P 3306 -u admin -p
Enter password: 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 18
Server version: 5.7.12 MySQL Community Server (GPL)

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [(none)]> 

mydbデータベースを作っておく。

MySQL [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.01 sec)

MySQL [(none)]> create database mydb;
Query OK, 1 row affected (0.01 sec)

MySQL [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mydb               |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

MySQL [(none)]> 

sysbenchをインストールする。

Admin:~/environment $ curl -s https://packagecloud.io/install/repositories/akopytov/sysbench/script.rpm.sh | sudo bash
Detected operating system as amzn/2.
Checking for curl...
Detected curl...
Downloading repository file: https://packagecloud.io/install/repositories/akopytov/sysbench/config_file.repo?os=amzn&dist=2&source=script
done.
Installing pygpgme to verify GPG signatures...
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
akopytov_sysbench-source/signature                                                                                                                                                                      |  833 B  00:00:00     
Retrieving key from https://packagecloud.io/akopytov/sysbench/gpgkey
Importing GPG key 0x04DCFD39:
 Userid     : "https://packagecloud.io/akopytov/sysbench-prerelease (https://packagecloud.io/docs#gpg_signing) <support@packagecloud.io>"
 Fingerprint: 9789 8d69 f99e e5ca c462 a0f8 cf10 4890 04dc fd39
 From       : https://packagecloud.io/akopytov/sysbench/gpgkey
akopytov_sysbench-source/signature                                                                                                                                                                      | 1.0 kB  00:00:00 !!! 
amzn2-core                                                                                                                                                                                              | 3.7 kB  00:00:00     
akopytov_sysbench-source/primary                                                                                                                                                                        | 2.0 kB  00:00:01     
akopytov_sysbench-source                                                                                                                                                                                                 15/15
234 packages excluded due to repository priority protections
Package pygpgme-0.3-9.amzn2.0.3.x86_64 already installed and latest version
Nothing to do
Installing yum-utils...
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
234 packages excluded due to repository priority protections
Package yum-utils-1.1.31-46.amzn2.0.1.noarch already installed and latest version
Nothing to do
Generating yum cache for akopytov_sysbench...
Importing GPG key 0x04DCFD39:
 Userid     : "https://packagecloud.io/akopytov/sysbench-prerelease (https://packagecloud.io/docs#gpg_signing) <support@packagecloud.io>"
 Fingerprint: 9789 8d69 f99e e5ca c462 a0f8 cf10 4890 04dc fd39
 From       : https://packagecloud.io/akopytov/sysbench/gpgkey
Generating yum cache for akopytov_sysbench-source...

The repository is setup! You can now install packages.
Admin:~/environment $ sudo yum -y install sysbench
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
234 packages excluded due to repository priority protections
Resolving Dependencies
--> Running transaction check
---> Package sysbench.x86_64 0:1.0.20-1.el7 will be installed
--> Processing Dependency: libpq.so.5()(64bit) for package: sysbench-1.0.20-1.el7.x86_64
--> Running transaction check
---> Package postgresql-libs.x86_64 0:9.2.24-6.amzn2 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

===============================================================================================================================================================================================================================
 Package                                                 Arch                                           Version                                                Repository                                                 Size
===============================================================================================================================================================================================================================
Installing:
 sysbench                                                x86_64                                         1.0.20-1.el7                                           akopytov_sysbench                                         430 k
Installing for dependencies:
 postgresql-libs                                         x86_64                                         9.2.24-6.amzn2                                         amzn2-core                                                232 k

Transaction Summary
===============================================================================================================================================================================================================================
Install  1 Package (+1 Dependent package)

Total download size: 662 k
Installed size: 1.8 M
Downloading packages:
(1/2): postgresql-libs-9.2.24-6.amzn2.x86_64.rpm                                                                                                                                                        | 232 kB  00:00:00     
(2/2): sysbench-1.0.20-1.el7.x86_64.rpm                                                                                                                                                                 | 430 kB  00:00:00     
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Total                                                                                                                                                                                          983 kB/s | 662 kB  00:00:00     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Warning: RPMDB altered outside of yum.
  Installing : postgresql-libs-9.2.24-6.amzn2.x86_64                                                                                                                                                                       1/2 
  Installing : sysbench-1.0.20-1.el7.x86_64                                                                                                                                                                                2/2 
  Verifying  : sysbench-1.0.20-1.el7.x86_64                                                                                                                                                                                1/2 
  Verifying  : postgresql-libs-9.2.24-6.amzn2.x86_64                                                                                                                                                                       2/2 

Installed:
  sysbench.x86_64 0:1.0.20-1.el7                                                                                                                                                                                               

Dependency Installed:
  postgresql-libs.x86_64 0:9.2.24-6.amzn2                                                                                                                                                                                      

Complete!

テーブルを作成する。

PASSWORD=<パスワード>
sysbench --db-driver=mysql \
      --mysql-host=$ENDPOINT  \
      --mysql-user=admin \
      --mysql-password=$PASSWORD \
      --mysql-db=mydb \
      oltp_read_write \
      prepare
sysbench 1.0.20 (using bundled LuaJIT 2.1.0-beta2)

Creating table 'sbtest1'...
Inserting 10000 records into 'sbtest1'
Creating a secondary index on 'sbtest1'...

負荷をかける。

sysbench --db-driver=mysql \
      --mysql-host=$ENDPOINT  \
      --mysql-user=admin \
      --mysql-password=$PASSWORD \
      --mysql-db=mydb \
      oltp_read_write \
      run
sysbench 1.0.20 (using bundled LuaJIT 2.1.0-beta2)

Running the test with following options:
Number of threads: 1
Initializing random number generator from current time


Initializing worker threads...

Threads started!

SQL statistics:
    queries performed:
        read:                            3486
        write:                           996
        other:                           498
        total:                           4980
    transactions:                        249    (24.80 per sec.)
    queries:                             4980   (496.10 per sec.)
    ignored errors:                      0      (0.00 per sec.)
    reconnects:                          0      (0.00 per sec.)

General statistics:
    total time:                          10.0364s
    total number of events:              249

Latency (ms):
         min:                                   37.91
         avg:                                   40.30
         max:                                   48.68
         95th percentile:                       43.39
         sum:                                10033.87

Threads fairness:
    events (avg/stddev):           249.0000/0.00
    execution time (avg/stddev):   10.0339/0.00

これだと同時実行数が1なのでDB Load(平均アクティブセッション数)をもとにインサイトを出すDevOps Guru for RDSは何も出さないと思われる。

実行時間を5分、同時実行数を20にしてみる。

sysbench --db-driver=mysql \
      --mysql-host=$ENDPOINT  \
      --mysql-user=admin \
      --mysql-password=$PASSWORD \
      --mysql-db=mydb \
      --threads=20 \
      --time=300 \
      oltp_read_write \
      run
sysbench 1.0.20 (using bundled LuaJIT 2.1.0-beta2)

Running the test with following options:
Number of threads: 20
Initializing random number generator from current time


Initializing worker threads...

Threads started!

SQL statistics:
    queries performed:
        read:                            1682296
        write:                           467487
        other:                           235659
        total:                           2385442
    transactions:                        115495 (384.92 per sec.)
    queries:                             2385442 (7950.15 per sec.)
    ignored errors:                      4669   (15.56 per sec.)
    reconnects:                          0      (0.00 per sec.)

General statistics:
    total time:                          300.0482s
    total number of events:              115495

Latency (ms):
         min:                                   38.30
         avg:                                   51.95
         max:                                  204.73
         95th percentile:                       75.82
         sum:                              6000173.52

Threads fairness:
    events (avg/stddev):           5774.7500/15.97
    execution time (avg/stddev):   300.0087/0.02

パフォーマンスインサイトで負荷がかかったことが確認できた。

f:id:sotoiwa:20220106180231p:plain

さらにスレッドを100、300と増やしてみたところ、DevOps Guruのインサイトも出てきた。しかしこれはDB Loadではないので、DevOps Guru for RDSのインサイトではなく、普通のDevOps Guruのインサイトのように思える。

f:id:sotoiwa:20220106182031p:plain

f:id:sotoiwa:20220106182046p:plain

f:id:sotoiwa:20220106182059p:plain