把剩饭溜溜——记一次简单的性能测试中数据库调优

其实这种工作几年前也都有做过,真的是靠自学和经验累积,说真的没啥技术含量。

现象:

数据库服务器负载过高,按理说一个普通的压测,数据库服务器都是物理机,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.

如果业务使然,必须实时,那没话可说,做为一个测试人员,我只管提个建议和风险。

如果其它接口业务全是这样,那可小心点啦!

 

posted @ 2018-12-13 11:34  sincoolvip  阅读(218)  评论(0编辑  收藏  举报