Sysbench使用不同的数据分布(–rand-type)模型压测MySQL

概述

不同的sysbench参数可能对测试结果有一定的影响,如果不注意的话,可能会影响我们对于测试结果的分析,甚至可能会得出错误的测试结论。本文较为详细的介绍sysbench中的--rand-type参数。

–rand-type 的含义

--rand-type是sysbench中控制随机数据分布的参数,主要的选项包括了uniform,gaussian,special,pareto,在最新的版本,新增了zipfian。具体的各个随机分布类似介绍如下:

  • uniform 是均匀分布
  • gaussian是正态分布,也叫高斯分布(常见的标准正态分布是其特殊形式)
  • pareto 是帕累托分布,“二八分布”是其特殊形态。该分布在经济学中使用较多,最为常见的例子是认为20%的人拥有80%的财富,即财富在人群中的分布情况。zipfian分布与该分布有一些类似。
  • special 这个是一个奇怪的分布,并不是某个标准分布。应该是Sysbench作者自己定义的某个分布,该分布下取值几乎完全落在中间值附近。

关于这些分布的讨论可以参考Sysbench在GitHub Issue上的讨论(Use the uniform distribution by default @GitHub Issue),也可以参考Percona相关的讨论文章(Sysbench and the Random Distribution Effect@Percona)。这里使用GitHub Issue中提到的方法,来对这些分布做一个测试,从而大家可以非常好的从可视化的角度去理解这些分布:

四种分布的示意图

高斯/正态分布/gaussian
均匀/uniform分布
帕累托/pareto分布
“特殊/special分布”

生成示意图的脚本与命令

上述的数据和图形,是使用如下的lua脚本生成:

# cat r.lua
function thread_init()
   h = sysbench.histogram.new(1000, 1, 100)
end

function event()
   h:update(sysbench.rand.default(1, 100))
end

function thread_done()
   h:print()
end

执行命令:

 sysbench r.lua --time=1 --rand-type=special --verbosity=0 run

不同版本–rand-type的参数

在yum仓库中默认安装的版本主要为1.0.20版:

$ /usr/bin/sysbench --version
sysbench 1.0.20

$ /usr/bin/sysbench --help
...
Pseudo-Random Numbers Generator options:
  --rand-type=STRING random numbers distribution {uniform,gaussian,special,pareto} [special]
  --rand-spec-iter=N number of iterations used for numbers generation [12]
  --rand-spec-pct=N  percentage of values to be treated as 'special' (for special distribution) [1]
  --rand-spec-res=N  percentage of 'special' values to use (for special distribution) [75]
  --rand-seed=N      seed for random number generator. When 0, the current time is used as a RNG seed. [0]
  --rand-pareto-h=N  parameter h for pareto distribution [0.2]
...

根据最新的仓库代码编译的版本为1.1.0版本:

$ sysbench --version
sysbench 1.1.0
$ sysbench --help
...
Pseudo-Random Numbers Generator options:
  --rand-type=STRING   random numbers distribution {uniform, gaussian, pareto, zipfian} to use by default [uniform]
  --rand-seed=N        seed for random number generator. When 0, the current time is used as an RNG seed. [0]
  --rand-pareto-h=N    shape parameter for the Pareto distribution [0.2]
  --rand-zipfian-exp=N shape parameter (exponent, theta) for the Zipfian distribution [0.8]
...

可以看到这两个版本默认的--rand-type分别是specialuniform。并且,在最新的版本中,已经不再支持special分布。

取值specialuniform对性能的影响

这里依旧采取了,在压测”标准MySQL”时的测试模型,以AWS m6i.xlarge的实例进行对比测试。

主要sysbench参数:

 --skip_trx=on --db-ps-mode=disable --rand-type=uniform
 --skip_trx=on --db-ps-mode=disable --rand-type=special

性能详细数据:

2024-05@Benchmark for sysbench parameter --rand-type:uniform
host : stdbench 
sub_dir : stdbench001.cjzowaj9vqpd.ap-northeast-1.rds.amazonaws.com 
rand_type : uniform 
region : ap-northeast-1 
rds_instance_type : db.m6i.xlarge 
engine : mysql 
engine_version : 8.0 
multi_az : 1 
storage_type : io1 
allocated_storage : 100 
iops : 3000 
sysbench for host :stdbench001.cjzowaj9vqpd.ap-northeast-1.rds.amazonaws.com
threads|transactions| queries| time |avg/Latency|95%/Latency
      4|       28389|  511002|300.02|      42.27|      44.98 
      8|       56623| 1019214|300.04|      42.39|      45.79 
     16|      109908| 1978344|300.04|      43.67|      49.21 
     32|      211982| 3815676|300.04|      45.29|      53.85 
     48|      279987| 5039766|300.04|      51.43|      63.32 
     64|      318627| 5735303|300.03|      60.26|      74.46 
     96|      371719| 6690942|300.09|      77.49|      95.81 
    128|      395151| 7112735|300.05|      97.18|     125.52 
    192|      401868| 7233675|300.09|     143.34|     207.82 
    256|      400550| 7209951|300.18|     191.76|     272.27 
    384|      394248| 7096515|300.52|     292.43|     404.61 
    512|      385417| 6937540|300.29|     398.64|     539.71 
2024-05@Benchmark for sysbench parameter --rand-type:special
host : stdbench 
sub_dir : stdbench001.cjzowaj9vqpd.ap-northeast-1.rds.amazonaws.com 
rand_type : special 
region : ap-northeast-1 
rds_instance_type : db.m6i.xlarge 
engine : mysql 
engine_version : 8.0 
multi_az : 1 
storage_type : io1 
allocated_storage : 100 
iops : 3000 
sysbench for host :stdbench001.cjzowaj9vqpd.ap-northeast-1.rds.amazonaws.com
threads|transactions| queries| time |avg/Latency|95%/Latency
      4|       28460|  512280|300.04|      42.17|      45.79 
      8|       56169| 1011042|300.04|      42.73|      45.79 
     16|      109255| 1966607|300.04|      43.93|      48.34 
     32|      212598| 3826934|300.04|      45.16|      52.89 
     48|      283140| 5096996|300.03|      50.86|      62.19 
     64|      317501| 5715919|300.05|      60.48|      73.13 
     96|      372169| 6701456|300.08|      77.40|      92.42 
    128|      395665| 7124690|300.07|      97.06|     127.81 
    192|      398775| 7181316|300.11|     144.46|     207.82 
    256|      391037| 7042576|300.17|     196.45|     277.21 
    384|      385273| 6940779|300.31|     299.15|     411.96 
    512|      386829| 6970181|300.74|     397.25|     549.52 

可以看到,在当前的测试场景下,两者并没有表现出明显的性能差异。

参考链接

In:

Leave a Reply

Your email address will not be published. Required fields are marked *