一、硬件配置与所能支持并发量
一般我们说的负载,主要居于单台机器只部署应用或者mysql的情况,常常发现有些人在一台机器上部署了很多的应用,包括数据库也放在一起,发现某个应用配置完全没问题,但偶尔会有卡顿的情况,实际可能被其他应用占用了资源导致。
1、通常情况下,线上环境应用部署在4核8G的机器上,而数据库应部署在8核16G或者16核32G,正常情况下单节点应用服务可支撑500左右的并发,当然还要根据请求的处理时长来计算,比如接口请求响应过慢就会导致并发降低
2、在一个系统中,往往压力会集中在数据库上,因为请求一般最终会落到数据库上,而数据库需要在内存以及磁盘上进行大量的IO操作。一般来说8核16G的机器部署mysql数据库可以扛住一两千的并发,如果并发量再高些比如几千,就会造成数据库CPU、磁盘、IO、内存等负载过高,严重会引起宕机
3、16核32G的机器,一般可以扛住两三千的并发、甚至到三四千也都可以,具体还是有要看sql的复杂度等,对于数据库而已,一般采用的SSD固态硬盘,因为数据操作需要大量的磁盘IO,SSD的IO会相对大很多。
二、如何对即将投入生产环境的数据库进行性能测试
在一个数据库即将投入生产环境前,一般都需要进行一个基准压测,观察系统在不同压力下CPU/磁盘IO/网络/内存等的变化情况,心里大概了解到数据库可以扛住多大的压力,瓶颈在哪里。
1、mysql的性能测试一般关注的指标有:
A、IOPS:机器的随机IO并发处理能力,比如机器可达到的200IOPS,说明每秒可以执行200个随机读写请求
B、吞吐量:单位时间内的可以处理的事务数,也即TPS,也可以看存储每秒可以读写的数据量
C、响应时间/延迟:测试一个任务执行所需的时间,比如写一条日志到磁盘文件,所需要花费的时间
2、mysql的压测工具有:
A、mysqlslap:可以模拟服务器的负载,并输出计时信息,测试时可以指定并发数、sql语句,如果没指定,可以自动生成schema的select语句
B、sysbench:一款多线程压测工具,可以根据影响数据库性能的因素来评估系统性能、可以执行多种类型的基准测试,比如可以提供cpu测试、磁盘io测试、内存访问测试、线程调度测试、数据库oltp测试
三、sysbench的安装、说明、压测和指标分析
1、下载并安装
下载:curl -s https://packagecloud.io/install/repositories/akopytov/sysbench/script.rpm.sh | sudo bash
安装:yum -y install sysbench
查看是否安装成功:sysbench --version
2、sysbench主要配置参数说明(prepare run cleanup help)
输#入sysbench --help可获取参数说明,这里只列举常用的:
#General options(通用配置):
--threads=10 #使用的线程数,默认为1
--events=N #限制事件总数,默认为0
--time=N #总执行时间限制,默认10s,也就是说连续访问10s
--forced-shutdown=STRING #在--time参数限制之后等待多少秒关闭执行,默认是off关闭状态
--thread-stack-size=SIZE #每个线程的栈大小,默认64K
--rate=N #事务平均速率,默认0,不限制速率
--report-interval=N #多久输出一次压测结果,默认0,中间不输出,常常设置为1,一秒钟输出一