zoukankan      html  css  js  c++  java
  • MySQL 压测

    https://mp.weixin.qq.com/s/vKJZp5cGUetHokGh2EZUXg

     mysqlslap --iterations=100 --create-schema='test' --query="query.sql" --number-of-queries=20000 --delimiter=";" --concurrency=100

    3.2.2 网络参数问题

    • 问题描述

    使用 mysqlslap 压测某个语句,当并发数提升到200或400时,CDB性能下降,不符合业务预期。

    • 排查过程

         这里只和高并发有关,CDB团队首先想到的是MySQL是否开启了thread pool功能,对于CDB和自建均未开启thread pool功能,而在CDB上打开了thread pool功能后问题仍然存在。而且在本地和远程压测都存在同样问题,这也排除了网络的因素。

         有一个细节是CDB团队观察到压测过程中数据库的连接数并不稳定,忽上忽下,就开始怀疑是mysqlslap压测工具的问题。于是CDB团队开始查看mysqlslap源码, 确认mysqlslap用的是否是短连接。然而mysqlslap用的是长连接,并不是短连接。但有一种情况,当mysqlslap执行完一轮(number_of_querys)语句后会新建连接。当压测参数iterations设置较大,number_of_querys较小,并且调大并发数时,每个连接执行的语句相对就少了。也就是说,当并发数增大时,压测过程中的新建连接增加了。为了验证这个问题, CDB团队调大压测参数number_of_querys后,压测性能就上去了。

         到这里,问题可以归结为大量建立连接影响了性能。于是CDB团队开始查找TCP相关系统参数的区别,通过修改主机参数tcp_rmem/tcp_wmem/tcp_max_syn_backlog/somaxconn,解决了高并发下的性能下降问题。

    • 问题原因

          mysqlslap的实现方式是每次迭代都后重新建立连接,即所有客户端执行完number_of_queries数量的SQL后会重新建连连接,当并发增加时,每个客户端执行的sql相对较少,mysqlslap这种长连接测试方式退化类似于短连接的测试方式,而CDB主机对短连接处理的不是特别好。解决方案

          修改主机参数, 提高了建立连接效率

    tcp_rmem="4096 873800 4194304" (原"4096 87380 4194304", TCP receive memory buffers)

    tcp_wmem = "4096 163840 4194304" (原"4096 16384 4194304", TCP send memory buffers)

    tcp_max_syn_backlog=3240000 (原4096, sync queue size)

    somaxconn = 2048(原128, accept queue size)

    • 方案效果

          通过优化腾讯云CDB主机参数tcp_rmem/tcp_wmem/tcp_max_syn_backlog/somaxconn,解决了通过短连高并发下的性能下降问题。

  • 相关阅读:
    20191010-2 每周例行报告
    2018092609-2 选题 Scrum立会报告+燃尽图 01
    20190919-1 每周例行报告
    20190919-4 单元测试,结对
    20190919-6 四则运算试题生成,结对
    20190919-5 代码规范,结对
    PSP总结报告
    20181204-1 每周例行报告
    每个成员明确公开地表示对成员帮助的感谢 (并且写在各自的博客里)
    作业要求 20181127-2 每周例行报告
  • 原文地址:https://www.cnblogs.com/rsapaper/p/12860381.html
Copyright © 2011-2022 走看看