把剩饭溜溜——记一次简单的性能测试中数据库调优
其实这种工作几年前也都有做过,真的是靠自学和经验累积,说真的没啥技术含量。
现象:
数据库服务器负载过高,按理说一个普通的压测,数据库服务器都是物理机,25核6G这样的配置。非常厉害了,一个百W不到的压力负载正常也该在1以下才合理。
但实际上一压测负载就上升到6-7甚至更高,直到mysql服务假死掉。
分析思路:
1、慢语句
真的是很奇怪,查看服务器上记录慢语句日志,没有,设置的是超过0.5s会记录,这里竟然没有。
2、看mysql进程
show processlists;
有语句堵住了,按理说,如果真的没有慢语句,那么这里进程根本来不及捕获到,不会停留,会刷刷刷走。
我们先来分析一下这条语句:
看一下一个单表查询,竟然没有用到索引,查询结果有20几W条。不慢才怪呢。只能说服务器强大,死的慢一点。
优化呗,加索引,非常简单。
加索引过程中遇到的问题:
这个字段加索引提示错误: Specified key was too long;max key length is 767 bytes
原因是建立索引字段长度过长,那么我们建索引就不能常规执行了。得截取长度。
Alter table `database_a`.`table_a` add index `appToken` (`appToken`(191)) ;
加上后,负载立马回落到2以下。但不行啊。还是高了。
3、查看general.log看查询语句是否太多,考虑加缓存
general.log统计我就不详细讲了。只讲道理
做了一个测试,压测一个http请求接口5分钟,请求共3W条,general.log中共捕获3W条sql.
如果业务使然,必须实时,那没话可说,做为一个测试人员,我只管提个建议和风险。
如果其它接口业务全是这样,那可小心点啦!
如果您认为阅读这篇博客让您有些收获,不妨点击一下右下角的【推荐】
本文版权归作者和博客园共有,欢迎转载