MySQL压力测试
测试工具
mysqlslap 跟上选项 # mysql自带
mysqlslap -a -uroot -p123456 #单线程测试
mysqlslap -a -c 100 -uroot -p123456 #多线程并发测试(模拟100个客户端并发连接)
mysqlslap -a --concurrency=50,100 --number-of-queries 1000 --iterations=5 --engine=myisam,innodb -uroot -p123456 #测试不同引擎性能对比,发起1000个请求,测试五次,每次并行50个或100个
MySQL优化
1、更改最大连接数(默认是151)
要根据mysql的承载能力更改在配置文件中更改max_connections=10000
如果最大连接数修改的过大,还需在service文件中进行修改,添加LimitNOFILE=10000
systemctl daemon-reload && systemctl restart mysql
2、存储引擎改为InnoDB,设置buffer缓冲池大小保存索引和原始数据,一般设置物理内存的80%
innodb_buffer_poor-size = 24G
3、给表中的字段加索引,提高查询速度
4、对事务日志进行优化
在配置文件中进行修改:innodb_flush_log_at_trx_commit=0|1|2
数据量不大,1合适,写一次,I/O一次,比较安全,但效率低。适用于银行金融等行业
数据量大用,2合适,1s中进行一次I/O,效率高,但是不安全。
调整事务的隔离级别为可重复读
transaction_isolation = REPEATABLE-READ
5、对慢查询日志进行优化
long_query_time=N #慢查询的阀值,单位秒,默认为10s,修改为3s
例如:
[mysqld]
slow_query_log=ON 开启查询功能
long_query_time=3
使用慢查询分析工具,对查询出来的语句进行优化
如:mesqldumpslow -s c -t 2 /var/lib/mysql/centos8-slow.log
6、主从复制:默认是异步复制
默认是异步复制:客户端把用户请求发到主节点更新数据库之后,只要事务一提交,返回成功结果。但数据有可能还没有备份到从节点,效率高,但会出现单点问题。
同步复制:客户端把用户请求发到主节点更新数据库之后,主节点会同步到各个从节点上,所有的从节点同步完成就会之后才会向客户端反馈成功结果,客户端等待时间有可能很长。安全性高,但效率太慢
半同步复制:客户端把用户请求发到主节点更新数据库之后,只要有一个从节点同步完成就会向客户端反馈成功结果。 即实现了数据安全,又提高了效率。
半同步超时机制:设置多长时间内没有一个从节点同步完成,直接返回客户端结果(默认事件10s)
7、GTID复制 (会自动寻找到相应的二进制位置开始同步,并且可以增加dump线程数量实现并行复制)
8、二进制日志采用ROW格式
binlog_format=row
9、MyCAT读写分离(写操作发送到主节点,读操作发送到从节点)
生产环境my.cnf配置
服务器租用托管,机房租用托管,主机租用托管,https://www.e1idc.com