Atlas的性能测试

    • 测试配置文件中event-threads参数对Atlas的影响,并找出最优值。
    • 服务器A运行着主库
    • 服务器B运行着从库
    • 服务器C运行Atlas系统

    有关Atlas系统安装与配置,请参考文档《Atlas的安装》,sysbench直接通过 yum安装()。

    利用sysbench测试通过Atlas转发SQL请求和直连DB发送SQL请求这两种情况下,Atlas和Mysql系统的两项数据指标:QPS和每条SQL请求平均处理时间。通过sysbench发送三类SQL请求:select,update,insert。每类请求都是单独发送。具体的操作过程如下所示:

    执行下面的命令测试sysbench连接Atlas

    上述命令是sysbench执行80000次随机select操作,这80000次操作都是非事务的。通过修改 选项,可以执行update和insert操作。通过修改 参数,可以调整并发测试线程的个数。

    sysbench创建表的语句是:

    执行下面的命令测试直连DB:

    利用sysbench测试了并发线程个数不同的情况下,分别执行80000次 select,update 和 insert 三种操作。测试连接 Atlas 和直连 DB 这两种情况下的 QPS(QPS越大,系统性能越好),每组数据重复测试三次后取平均值,具体数据对比如下表所示:

    qpsduibi

    上表对应的折线图如下所示:

    同时测试了sysbench不同并发线程下,完成每个SQL操作平均时间(单位:ms,时间越短,系统性能越好)。具体数据对比如下所示:

    shijianyanchi

    上表对应的折线图如下所示:

    从表一可以看出,当sysbench的并发测试线程较少时,连接Atlas和直连DB的QPS差距较大。这主要是因为当sysbench并发线程少时,Atlas的性能没有得到充分的发挥,sysbench只有很少的线程向Atlas发送请求,此时网络延迟对QPS的影响是最主要的。当sysbench的并发测试线程较大时,此时Atlas的性能就得到了充分的发挥,此时QPS的对比是连接Atlas与直连DB性能对比的真实的反应,网络延迟对QPS的影响作用就显得很小了。从表一数据来看,通过Atlas发送select请求时的QPS是直连DB时60%左右,而update和insert请求对应的QPS则更高一些,相当于直连DB时的80%左右。由此看来利用Atlas转发SQL请求带来的性能下降虽有下降,但完全可以接受。

    从表二可以看出,在sysbench的并发测试线程较少的情况下,连接Atlas和直连DB时完成每条SQL操作的时间差距较大,造成这种结果的原因也是由于Atlas性能未充分发挥,网络延迟起了主要作用。当sysbench并发测试线程较高时,Atlas的性能充分发挥,此时完成每条SQL操作的时间差距对比,才是Atlas的真正性能反映。通过Atlas发送SQL请求时的每条操作完成时间大约是直连DB时1.5倍,由此看来利用Atlas转发SQL请求带来的时间延迟不是非常明显,同样也是可以接受的。

    event-threads 是 Atlas 工作时创建的工作线程个数,这个值设置的不同对 Atlas 性能也有比较明显的影响。我们分别测试将 event-threads 设置为4,8,16时,Atlas转发select,update和insert三类操作请求时的 QPS和完成每条SQL操作时间对比。具体对比结果如下所述:

    1.利用sysbench分别并发16,32,64和128个测试线程,执行80000次select操作,Atlas具体的QPS对比如下表所示:

    上表对应的折线图如下所示:

    tusan

    完成每条select操作时间(单位:ms)对比如下表所示:

    上表对应的折线图如下所示:

    tusi

    2.利用sysbench分别并发16,32,64和128个测试线程,执行80000次update操作,Atlas具体的QPS对比如下表所示:

    上表对应的折线图如下所示:

    完成每条update操作时间(单位:ms)对比如下表所示:

    biaoliu

    上表对应的折线图如下所示:

    3.利用sysbench分别并发16,32,64和128个测试线程,执行80000次insert操作,Atlas具体的QPS对比如下表所示:

    biaoqi

    上表对应的折线图如下所示:

    完成每条insert操作时间(单位:ms)对比如下表所示:

    biaoba

    上表对应的折线图如下所示:

    从Atlas处理三类SQL操作的QPS和完成每条SQL操作的时间对比来看,将event-threads参数设置为CPU个数的2-4倍较为合理。将event-threads参数设置为CPU个数的两倍时,带来的QPS提升较为明显,将其设置为CPU个数的四倍时,QPS也有提升但不是非常明显。对于处理每条SQL操作的时间,通过提高event-threads值是没有显著效果的。

    所以我们建议使用者:如果追求Atlas处理SQL请求时的QPS,将event-threads值设置为CPU个数的2-4倍。如果追求Atlas处理SQL请求的完成时间,将event-threads值设置为CPU个数即可。