mysql性能调优
- sysbench压测调优到百万级别qps
sysbench压测调优到百万级别qps
这篇文章https://www.percona.com/blog/millions-queries-per-second-postgresql-and-mysql-peaceful-battle-at-modern-demanding-workloads/#:~:text=We%20contacted%20SysBench%20author%20Alexey%20Kopytov%2C%20and%20he,the%20concurrency_kit%20branch%20%28better%20concurrency%20and%20Lua%20processing%29
表示mysql和pg可以达到百万级别的QPS,于是我们在自己的实例上进行测试。
使用文章中推荐的方法来测试:
sysbench /usr/share/sysbench/oltp_point_select.lua --db-driver=mysql \
--table-size=10000000 --tables=8 --threads=$1 --time=300 \
--rate=0 --report-interval=1 --rand-type=uniform --rand-seed=1 \
--mysql-user=$user --mysql-password=$pass --mysql-host=$host \
--mysql-port=$port --events=0 run
得到结果:
发现效果不佳,只有1W多QPS。。
线程数调大+warmup参数调大试试:
发现没有warm-up参数。。。这个时候就应该意识到是版本问题了,然而还在试错。
继续修改参数ssl=0 ,performance_schema=OFF (performance_schema简称ps,这个参数是开启对mysql的性能检测,对于mysql整体性能有一定影响)
有一些提高,但是并没有数量级的变化,这个时候发现时延很高,意识到应该使用Unix socket连接,目前测试使用另外一台机器,达不到理想效果;
继续调参,5.7把query_cache_size设成0,(这个参数允许 MySQL 在缓存中存储查询结果,从而避免了对数据库的查询操作,提高了查询性能。但是在某些情况下,查询缓存可能会对 MySQL 的性能产生负面影响,比如数据更新频繁的情况下,因为每次数据更新都会导致相关的查询缓存失效。在 MySQL 8.0 中,query_cache_size 改成了query_cache_type 参数。MySQL 8.0 中的查询缓存实现方式与之前的版本有所不同,因此建议不要在 MySQL 8.0 中使用查询缓存,而是采用其他性能优化措施。)
好多了,还得是缓存!
改成unix-socket:
达标了~,测试脚本:
sysbench /usr/share/sysbench/oltp_point_select.lua --db-driver=mysql \
--table-size=25000 --tables=8 \
--rate=0 --report-interval=10 --rand-type=uniform --rand-seed=1 \
--time=60 --threads=128 --mysql-socket=/var/lib/mysql/mysql.sock \
--mysql-user=root --mysql-password=Admin@123 --mysql-host=127.0.0.1 \
--mysql-port=3306 --mysql-db=test123 --events=0 run
发现线程控制在128性能最好,高了低了都不如128.