【SysBench】OLTP 基准测试示例

前言

本文采用 MySQL 沙盒实例作为测试目标,使用 sysbench-1.20 对其做 OLTP 基准测试。

有关 MySQL 沙盒的更多信息,请参阅 玩转 MySQL Shell 沙盒实例【MySQL Shell】6.8 AdminAPI MySQL 沙盒


1、部署一个 MySQL 沙盒实例

使用 mysqlsh 部署一个 MySQL 沙盒实例用于测试 OLTP 。

 MySQL  JS > dba.deploySandboxInstance(3310);
A new MySQL sandbox instance will be created on this host in 
/root/mysql-sandboxes/3310

Warning: Sandbox instances are only suitable for deploying and 
running on your local machine for testing purposes and are not 
accessible from external networks.

Please enter a MySQL root password for the new instance: ********

Deploying new MySQL instance...

Instance localhost:3310 successfully deployed and started.
Use shell.connect('root@localhost:3310') to connect to the instance.

2、创建 sysbench oltp 测试的基础配置文件

为什么要使用配置文件?方便快捷啊!配置文件可以简化操作,省着在命令行中指定这些参数时至少还要多打 -- 和空格。如果一些参数可以复用,建议创建一个配置文件。

$ cat mysql-sb.cnf 
threads=2
time=600

db-driver=mysql
mysql-host=localhost
mysql-port=3310
mysql-socket=/root/mysql-sandboxes/3310/sandboxdata/mysqld.sock
mysql-user=root
mysql-password=Ro123ot$
mysql-db=sbtest

在创建时读者可能遇到一个问题,在配置文件中指定诸如 tables 选项时不生效,并且会报 Unknown argument type: 0 。而在命令行中指定时则有效。原因是什么呢?

因为这个参数是 Lua 脚本的参数,而不是 sysbench 这个二进制可执行文件的参数!

所以应该在命令行中使用诸如 --tables=N 这样的 Lua 脚本参数来测试。

3、准备测试数据

笔者准备了 100 个包含 10000 行数据的测试表,库名和表名都是用默认值。

$ sysbench --config-file=mysql-sb.cnf --tables=100 oltp_common prepare

注意此阶段的屏幕打印信息,多线程时可能出现争用,导致部分表未创建成功,或写入的数据不全。

sbtest6 创建失败报错:
在这里插入图片描述

计划创建 100 张表,实际只创建了 53 个,上面的 sbtest6 表虽然最后创建成功了,但插入的数据不全。

在这里插入图片描述

在这里插入图片描述

4、运行测试

1) oltp_read_write

建议先对支持 prewarm 选项的 Lua 脚本使用 prewarm 选项,以预热数据到内存,提高性能。

$ sysbench --config-file=mysql-sb.cnf --tables=100 oltp_read_write.lua prewarm

因输出过长,以下仅截取部分信息。

预热后:

$ sysbench --config-file=mysql-sb.cnf --tables=100 oltp_read_write.lua run
sysbench 1.0.20 (using bundled LuaJIT 2.1.0-beta2)

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


Initializing worker threads...

Threads started!

SQL statistics:
    queries performed:
        read:                            2272046
        write:                           530149
        other:                           443585
        total:                           3245780
    transactions:                        162289 (270.47 per sec.)
    queries:                             3245780 (5409.35 per sec.)
    ignored errors:                      0      (0.00 per sec.)
    reconnects:                          0      (0.00 per sec.)

General statistics:
    total time:                          600.0289s
    total number of events:              162289

Latency (ms):
         min:                                    4.40
         avg:                                    7.39
         max:                                  427.68
         95th percentile:                       10.09
         sum:                              1199185.78

Threads fairness:
    events (avg/stddev):           81144.5000/31.50
    execution time (avg/stddev):   599.5929/0.00

未预热,同时使用周期报告来每 5 秒生成一次报告信息:

$ sysbench --config-file=mysql-sb.cnf --tables=100 oltp_read_write run --report-interval=5
sysbench 1.0.20 (using bundled LuaJIT 2.1.0-beta2)

Running the test with following options:
Number of threads: 2
Report intermediate results every 5 second(s)
Initializing random number generator from current time


Initializing worker threads...

Threads started!

[ 5s ] thds: 2 tps: 137.01 qps: 2747.56 (r/w/o: 1923.71/549.43/274.42) lat (ms,95%): 23.52 err/s: 0.00 reconn/s: 0.00
[ 10s ] thds: 2 tps: 199.67 qps: 3993.69 (r/w/o: 2795.44/798.90/399.35) lat (ms,95%): 14.73 err/s: 0.00 reconn/s: 0.00
[ 15s ] thds: 2 tps: 204.00 qps: 4080.05 (r/w/o: 2856.03/816.01/408.00) lat (ms,95%): 12.52 err/s: 0.00 reconn/s: 0.00
...
[ 590s ] thds: 2 tps: 285.00 qps: 5698.37 (r/w/o: 3989.18/1139.19/570.00) lat (ms,95%): 9.06 err/s: 0.00 reconn/s: 0.00
[ 595s ] thds: 2 tps: 285.80 qps: 5714.78 (r/w/o: 3999.39/1144.00/571.40) lat (ms,95%): 9.06 err/s: 0.00 reconn/s: 0.00
[ 600s ] thds: 2 tps: 281.97 qps: 5641.39 (r/w/o: 3949.97/1127.28/564.14) lat (ms,95%): 9.22 err/s: 0.00 reconn/s: 0.00
SQL statistics:
    queries performed:
        read:                            2126824
        write:                           607664
        other:                           303832
        total:                           3038320
    transactions:                        151916 (253.18 per sec.)
    queries:                             3038320 (5063.66 per sec.)
    ignored errors:                      0      (0.00 per sec.)
    reconnects:                          0      (0.00 per sec.)

General statistics:
    total time:                          600.0218s
    total number of events:              151916

Latency (ms):
         min:                                    4.70
         avg:                                    7.89
         max:                                 1579.23
         95th percentile:                        9.91
         sum:                              1199355.27

Threads fairness:
    events (avg/stddev):           75958.0000/101.00
    execution time (avg/stddev):   599.6776/0.00

2) oltp_point_select.lua

注意,.lua 后缀加不加都行。

$ sysbench --config-file=mysql-sb.cnf --tables=100 oltp_point_select.lua run
sysbench 1.0.20 (using bundled LuaJIT 2.1.0-beta2)

Running the test with following options:
Number of threads: 2
Report intermediate results every 5 second(s)
Initializing random number generator from current time


Initializing worker threads...

Threads started!
[ 5s ] thds: 2 tps: 13309.18 qps: 13309.18 (r/w/o: 13309.18/0.00/0.00) lat (ms,95%): 0.21 err/s: 0.00 reconn/s: 0.00
[ 10s ] thds: 2 tps: 12990.77 qps: 12990.77 (r/w/o: 12990.77/0.00/0.00) lat (ms,95%): 0.22 err/s: 0.00 reconn/s: 0.00
[ 15s ] thds: 2 tps: 13777.54 qps: 13777.54 (r/w/o: 13777.54/0.00/0.00) lat (ms,95%): 0.20 err/s: 0.00 reconn/s: 0.00
...
[ 590s ] thds: 2 tps: 13479.94 qps: 13479.94 (r/w/o: 13479.94/0.00/0.00) lat (ms,95%): 0.20 err/s: 0.00 reconn/s: 0.00
[ 595s ] thds: 2 tps: 13402.69 qps: 13402.69 (r/w/o: 13402.69/0.00/0.00) lat (ms,95%): 0.20 err/s: 0.00 reconn/s: 0.00
[ 600s ] thds: 2 tps: 13573.04 qps: 13573.04 (r/w/o: 13573.04/0.00/0.00) lat (ms,95%): 0.20 err/s: 0.00 reconn/s: 0.00
SQL statistics:
    queries performed:
        read:                            8165259
        write:                           0
        other:                           0
        total:                           8165259
    transactions:                        8165259 (13608.60 per sec.)
    queries:                             8165259 (13608.60 per sec.)
    ignored errors:                      0      (0.00 per sec.)
    reconnects:                          0      (0.00 per sec.)

General statistics:
    total time:                          600.0052s
    total number of events:              8165259

Latency (ms):
         min:                                    0.12
         avg:                                    0.15
         max:                                   48.51
         95th percentile:                        0.20
         sum:                              1189126.95

Threads fairness:
    events (avg/stddev):           4082629.5000/4029.50
    execution time (avg/stddev):   594.5635/0.01

3) oltp_write_only.lua

上面设置的 report-interval 每 5 秒报告一次太频繁了,笔者目的是为了演示 sysbench 的用法,因而选择后面不再报告了。

此外,这个测试我在命令行增加了开启直方图的参数 --histogram=on ,来看一下效果吧!

$ sysbench --config-file=mysql-sb.cnf --tables=100 oltp_write_only.lua run --histogram=on
sysbench 1.0.20 (using bundled LuaJIT 2.1.0-beta2)

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


Initializing worker threads...

Threads started!

Latency histogram (values are in milliseconds)
       value  ------------- distribution ------------- count
       1.759 |                                         1
       1.824 |                                         1
       1.857 |                                         5
       1.891 |                                         11
       1.925 |                                         22
       1.960 |                                         69
       1.996 |                                         149
       2.032 |                                         201
       2.069 |*                                        335
       2.106 |*                                        557
       2.145 |**                                       947
       2.184 |***                                      1327
       2.223 |****                                     1896
       2.264 |*****                                    2608
       2.305 |*******                                  3578
       2.347 |**********                               4687
       2.389 |*************                            6072
       2.433 |****************                         7844
       2.477 |********************                     9856
       2.522 |************************                 11344
       2.568 |**************************               12441
       2.615 |*****************************            13762
       2.662 |*******************************          15034
       2.710 |**********************************       16514
       2.760 |*************************************    17735
       2.810 |**************************************** 19185
       2.861 |**************************************** 19258
       2.913 |***************************************  18997
       2.966 |**************************************   18409
       3.020 |***********************************      17069
       3.075 |*********************************        15689
       3.130 |*******************************          14864
       3.187 |****************************             13647
       3.245 |**************************               12369
       3.304 |***********************                  11086
       3.364 |********************                     9858
       3.425 |******************                       8680
       3.488 |****************                         7786
       3.551 |**************                           6774
       3.615 |************                             5633
       3.681 |**********                               4828
       3.748 |********                                 3991
       3.816 |*******                                  3428
       3.885 |******                                   2853
       3.956 |*****                                    2360
       4.028 |****                                     1948
       4.101 |***                                      1648
       4.176 |***                                      1346
       4.252 |**                                       1082
       4.329 |**                                       1005
       4.407 |**                                       796
       4.487 |*                                        679
       4.569 |*                                        629
       4.652 |*                                        548
       4.737 |*                                        473
       4.823 |*                                        498
       4.910 |*                                        453
       4.999 |*                                        462
       5.090 |*                                        456
       5.183 |*                                        448
       5.277 |*                                        458
       5.373 |*                                        499
       5.470 |*                                        478
       5.570 |*                                        517
       5.671 |*                                        481
       5.774 |*                                        544
       5.879 |*                                        561
       5.986 |*                                        546
       6.095 |*                                        568
       6.205 |*                                        549
       6.318 |*                                        570
       6.433 |*                                        529
       6.550 |*                                        575
       6.669 |*                                        496
       6.790 |*                                        463
       6.913 |*                                        451
       7.039 |*                                        418
       7.167 |*                                        407
       7.297 |*                                        355
       7.430 |*                                        353
       7.565 |*                                        308
       7.702 |*                                        266
       7.842 |*                                        259
 
SQL statistics:
    queries performed:
        read:                            0
        write:                           1480184
        other:                           740092
        total:                           2220276
    transactions:                        370046 (616.73 per sec.)
    queries:                             2220276 (3700.37 per sec.)
    ignored errors:                      0      (0.00 per sec.)
    reconnects:                          0      (0.00 per sec.)

General statistics:
    total time:                          600.0123s
    total number of events:              370046

Latency (ms):
         min:                                    1.76
         avg:                                    3.24
         max:                                 1266.80
         95th percentile:                        4.41
         sum:                              1198670.01

Threads fairness:
    events (avg/stddev):           185023.0000/8.00
    execution time (avg/stddev):   599.3350/0.00

输出信息也太长了,以上仅截取重要的直方图部分。

4) oltp_delete.lua

$ sysbench --config-file=mysql-sb.cnf --tables=100 oltp_delete.lua run
sysbench 1.0.20 (using bundled LuaJIT 2.1.0-beta2)

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


Initializing worker threads...

Threads started!

SQL statistics:
    queries performed:
        read:                            0
        write:                           312795
        other:                           3073107
        total:                           3385902
    transactions:                        3385902 (5643.06 per sec.)
    queries:                             3385902 (5643.06 per sec.)
    ignored errors:                      0      (0.00 per sec.)
    reconnects:                          0      (0.00 per sec.)

General statistics:
    total time:                          600.0094s
    total number of events:              3385902

Latency (ms):
         min:                                    0.11
         avg:                                    0.35
         max:                                  774.49
         95th percentile:                        1.58
         sum:                              1194234.55

Threads fairness:
    events (avg/stddev):           1692951.0000/195.00
    execution time (avg/stddev):   597.1173/0.01

5) oltp_insert.lua

$ sysbench --config-file=mysql-sb.cnf --tables=100 oltp_insert.lua run --histogram=on
sysbench 1.0.20 (using bundled LuaJIT 2.1.0-beta2)

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


Initializing worker threads...

Threads started!

Latency histogram (values are in milliseconds)
       value  ------------- distribution ------------- count
       0.872 |                                         1
       0.888 |                                         3
       0.904 |                                         7
       0.920 |                                         12
       0.937 |                                         43
       0.954 |                                         73
       0.971 |                                         186
       0.989 |                                         359
       1.007 |*                                        548
       1.025 |*                                        640
       1.044 |*                                        829
       1.063 |*                                        1277
       1.082 |***                                      2289
       1.102 |****                                     3604
       1.122 |******                                   4984
       1.142 |*******                                  6073
       1.163 |*********                                7463
       1.184 |**********                               8819
       1.205 |***********                              9559
       1.227 |*************                            10751
       1.250 |***************                          12863
       1.272 |*******************                      15982
       1.295 |**********************                   19122
       1.319 |*************************                21523
       1.343 |**************************               22617
       1.367 |*****************************            24922
       1.392 |**********************************       29320
       1.417 |**************************************   32289
       1.443 |**************************************   32792
       1.469 |***************************************  33521
       1.496 |**************************************** 34324
       1.523 |**************************************   32975
       1.551 |***************************************  33122
       1.579 |**************************************   32907
       1.608 |*************************************    31956
       1.637 |************************************     30909
       1.667 |**********************************       29239
       1.697 |********************************         27315
       1.728 |*****************************            25275
       1.759 |**************************               22348
       1.791 |**********************                   18824
       1.824 |*******************                      16152
       1.857 |*****************                        14749
       1.891 |***************                          13044
       1.925 |*************                            10862
       1.960 |***********                              9120
       1.996 |*********                                7758
       2.032 |********                                 6459
       2.069 |******                                   5426
       2.106 |*****                                    4678
       2.145 |*****                                    4135
       2.184 |****                                     3500
       2.223 |****                                     3054
       2.264 |***                                      2768
       2.305 |***                                      2319
       2.347 |**                                       2034
       2.389 |**                                       1773
       2.433 |**                                       1516
       2.477 |**                                       1301
       2.522 |*                                        1070
       2.568 |*                                        954
       2.615 |*                                        755
       2.662 |*                                        675
       2.710 |*                                        631
       2.760 |*                                        492
       2.810 |*                                        451
       2.861 |      
SQL statistics:
    queries performed:
        read:                            0
        write:                           744453
        other:                           0
        total:                           744453
    transactions:                        744453 (1240.74 per sec.)
    queries:                             744453 (1240.74 per sec.)
    ignored errors:                      0      (0.00 per sec.)
    reconnects:                          0      (0.00 per sec.)

General statistics:
    total time:                          600.0049s
    total number of events:              744453

Latency (ms):
         min:                                    0.87
         avg:                                    1.61
         max:                                  926.39
         95th percentile:                        2.11
         sum:                              1196638.09

Threads fairness:
    events (avg/stddev):           372226.5000/3.50
    execution time (avg/stddev):   598.3190/0.01

6) oltp_read_only.lua

$ sysbench --config-file=mysql-sb.cnf --tables=100 oltp_read_only.lua  run
sysbench 1.0.20 (using bundled LuaJIT 2.1.0-beta2)

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


Initializing worker threads...

Threads started!

SQL statistics:
    queries performed:
        read:                            7425740
        write:                           0
        other:                           1060820
        total:                           8486560
    transactions:                        530410 (883.99 per sec.)
    queries:                             8486560 (14143.89 per sec.)
    ignored errors:                      0      (0.00 per sec.)
    reconnects:                          0      (0.00 per sec.)

General statistics:
    total time:                          600.0137s
    total number of events:              530410

Latency (ms):
         min:                                    1.97
         avg:                                    2.26
         max:                                   54.63
         95th percentile:                        3.07
         sum:                              1198568.01

Threads fairness:
    events (avg/stddev):           265205.0000/33.00
    execution time (avg/stddev):   599.2840/0.00

7) oltp_update_index.lua

$ sysbench --config-file=mysql-sb.cnf --tables=100 oltp_update_index.lua run
sysbench 1.0.20 (using bundled LuaJIT 2.1.0-beta2)

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


Initializing worker threads...

Threads started!

SQL statistics:
    queries performed:
        read:                            0
        write:                           145095
        other:                           4800953
        total:                           4946048
    transactions:                        4946048 (8243.33 per sec.)
    queries:                             4946048 (8243.33 per sec.)
    ignored errors:                      0      (0.00 per sec.)
    reconnects:                          0      (0.00 per sec.)

General statistics:
    total time:                          600.0030s
    total number of events:              4946048

Latency (ms):
         min:                                    0.12
         avg:                                    0.24
         max:                                  259.25
         95th percentile:                        0.42
         sum:                              1192593.66

Threads fairness:
    events (avg/stddev):           2473024.0000/862.00
    execution time (avg/stddev):   596.2968/0.08

8) oltp_update_non_index.lua

$ sysbench --config-file=mysql-sb.cnf --tables=100 oltp_update_non_index.lua run
sysbench 1.0.20 (using bundled LuaJIT 2.1.0-beta2)

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


Initializing worker threads...

Threads started!

SQL statistics:
    queries performed:
        read:                            0
        write:                           141508
        other:                           4686830
        total:                           4828338
    transactions:                        4828338 (8047.17 per sec.)
    queries:                             4828338 (8047.17 per sec.)
    ignored errors:                      0      (0.00 per sec.)
    reconnects:                          0      (0.00 per sec.)

General statistics:
    total time:                          600.0022s
    total number of events:              4828338

Latency (ms):
         min:                                    0.12
         avg:                                    0.25
         max:                                  382.28
         95th percentile:                        0.44
         sum:                              1192434.24

Threads fairness:
    events (avg/stddev):           2414169.0000/3780.00
    execution time (avg/stddev):   596.2171/0.04

9) select_random_points.lua


10) select_random_ranges.lua


11) bulk_insert.lua

此测试与前面那些测试有些不同,它只会创建与线程数相同的个数的表,并且没有 talbes 参数。因此我们需要修改执行命令,先清理 sbtest1sbtest2 表的数据,然后再 prepare ,最后再 run

$ sysbench --config-file=mysql-sb.cnf bulk_insert.lua cleanup
$ sysbench --config-file=mysql-sb.cnf bulk_insert.lua prepare
$ sysbench --config-file=mysql-sb.cnf --tables=100 bulk_insert.lua run
sysbench 1.0.20 (using bundled LuaJIT 2.1.0-beta2)

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


Initializing worker threads...

Threads started!

SQL statistics:
    queries performed:
        read:                            0
        write:                           2075
        other:                           0
        total:                           2075
    transactions:                        56561449 (94080.36 per sec.)
    queries:                             2075   (3.45 per sec.)
    ignored errors:                      0      (0.00 per sec.)
    reconnects:                          0      (0.00 per sec.)

General statistics:
    total time:                          600.9490s
    total number of events:              56561449

Latency (ms):
         min:                                    0.00
         avg:                                    0.02
         max:                                 2011.20
         95th percentile:                        0.00
         sum:                              1182530.43

Threads fairness:
    events (avg/stddev):           28280724.5000/13106.50
    execution time (avg/stddev):   591.2652/0.25

MySQL 数据库内的执行结果如下:

 MySQL  localhost:3310 ssl  sbtest  SQL > select count(*) from sbtest1;
+----------+
| count(*) |
+----------+
| 28293831 |
+----------+
1 row in set (1.7266 sec)

 MySQL  localhost:3310 ssl  sbtest  SQL > select count(*) from sbtest2;
+----------+
| count(*) |
+----------+
| 28267618 |
+----------+
1 row in set (1.8061 sec)

我们可以修改 times 参数为一个较小的值,因为没有必要批量插入 10 分钟的数据。

$ sysbench --config-file=mysql-sb.cnf bulk_insert.lua prepare --time=60
$ sysbench --config-file=mysql-sb.cnf bulk_insert.lua run --time=60
sysbench 1.0.20 (using bundled LuaJIT 2.1.0-beta2)

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


Initializing worker threads...

Threads started!

SQL statistics:
    queries performed:
        read:                            0
        write:                           190
        other:                           0
        total:                           190
    transactions:                        5722434 (94526.75 per sec.)
    queries:                             190    (3.14 per sec.)
    ignored errors:                      0      (0.00 per sec.)
    reconnects:                          0      (0.00 per sec.)

General statistics:
    total time:                          60.5316s
    total number of events:              5722434

Latency (ms):
         min:                                    0.00
         avg:                                    0.02
         max:                                 1102.79
         95th percentile:                        0.00
         sum:                               118906.30

Threads fairness:
    events (avg/stddev):           2861217.0000/0.00
    execution time (avg/stddev):   59.4532/0.19

可以看到再命令行最后指定的 --times=60 覆盖了配置文件中指定的 time=600

 MySQL  localhost:3310 ssl  sbtest  SQL > select 'sbtest1' table_name,count(*) from sbtest1 union all
                                       -> select 'sbtest1' table_name,count(*) from sbtest2;
+------------+----------+
| table_name | count(*) |
+------------+----------+
| sbtest1    |  2861217 |
| sbtest1    |  2861217 |
+------------+----------+
2 rows in set (0.4175 sec)

5、清理数据

$ sysbench --config-file=mysql-sb.cnf oltp_common.lua --tables=100 cleanup

在这里插入图片描述

6、销毁 MySQL 沙盒实例

mysqlsh 终端中执行:

 MySQL  localhost:3310 ssl  sbtest  JS > dba.stopSandboxInstance(3310)
The MySQL sandbox instance on this host in 
3310 will be stopped

Please enter the MySQL root password for the instance 'localhost:3310': ********
The active session is established to the sandbox being stopped so it's going to be closed.

Stopping MySQL instance...

Instance localhost:3310 successfully stopped.

 MySQL  JS > dba.deleteSandboxInstance(3310);

Deleting MySQL instance...

Instance localhost:3310 successfully deleted.
  • 34
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

独上西楼影三人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值