当我们谈到“软件测试”时,是指软件测试的相关工作,如单元测试、集成测试、系统测试等,但不局限于动态测试,也可以包括静态测试——需求评审、设计评审、代码评审和借助工具进行代码静态分析。
接口性能调优共11种方法,更多方法请查看:接口性能调优的方法全解
正文开始
相关系列优选文章:
(1)【性能测试】常见性能瓶颈解析及调优方案
(2)性能测试思维是这样形成的!
前言
接口性能优化对于从事后端开发的同学来说,或加个索引就能解决问题,或需要做代码重构,或需要增加缓存,或需要引入一些中间件,比如 mq,或需要分库分表,或需要拆分服务。。。
导致接口性能问题的原因千奇百怪,不同的项目不同的接口,原因可能也不一样。
我们一起来讨论以下行之有效的优化接口性能的办法:
1.索引
接口性能优化最先想到的可能是:优化索引,因为其优化成本是最小的,可通过查看线上日志或者监控报告,筛查出某个接口调用的某条SQL语句耗时问题。
排查时一般从以下几点进行:
SQL语句加索引了没?
加的索引生效了没?
mysql 选错索引了没?
1.1 无索引 情况下
在项目中很常见的问题:SQL语句中忘了where条件的关键字段,或者order by后面的排序字段加索引。
项目初期由于表中的数据量小,无索引 SQL查询也不会引起大的性能问题。
但随着业务壮大,表中数据量越来越多,就不得不加索引了。
show index from table_name
;
能单独查看某张表的索引情况。
show create table table_name
;
查看整张表的建表语句,里面也会展示索引情况。
如果无索引,则可以通过ALTER TABLE命令,或者CREATE INDEX命令添加索引:
ALTER TABLE table_name
ADD INDEX idx_name ( field_name );
或者
CREATE INDEX idx_name ON table_name
(field_name);
目前在 mysql 中,想要修改索引则只能先删除索引后,再重新添加新的索引。其中删除索引方式有2种:ALTER TABLE命令、DROP INDEX命令
ALTER TABLE table_name
DROP INDEX idx_name;
或者
DROP INDEX idx_name ON table_name
;
1.2 添加的索引没生效
show index from table_name
;
通过查询得知有索引,但它生效了没?如何进行查看索引有没有生效呢?
explain select * from table_name
where code=‘002’;
是的,用explain命令来查看 mysql 的执行计划,它会显示索引的使用情况。
这几列就可以判断索引使用情况:
那么你知道索引失效的常见原因吗?
如果上面2个都没问题,则需要进一步排查其他原因。
1.3 选错索引
常常有这种情况:同一条SQL,只有入参不同而已,但有时走的索引 a,有时却走的索引 b?
必要时则可用force index来强制查询SQL走某个索引。
SQL 优化
如果优化索引后也对性能改变不大,则试着优化一下SQL语句,在这列举了 SQL优化的小技巧,共15种:
远程调用
很多时候,我们需要在某个接口中,调用其他服务的接口。
有这样的业务场景:
用户信息查询接口中需要返回:用户名称、性别、等级、头像、成长值、积分等信息。
而用户名称、性别、等级、头像在用户服务中,成长值在成长值服务中,积分在积分服务中。为了汇总这些数据统一返回,需要另外提供一个对外接口服务。
这种业务场景下,我们就需要在某个接口中,调用其他服务的接口,即用户信息查询接口需要调用用户查询接口、成长值查询接口和积分查询接口,然后汇总数据统一返回。
如此计算,串行调用接口总耗时200ms + 150ms + 180ms = 530ms。
针对该情况,如何优化远程接口性能呢?
3.1 并行调用
既然串行调用多个远程接口性能很差,那我们可以改成并行调用:
这样则只需要取即耗时最长远程接口调用。
接口性能调优共11种方法,更多方法请查看:接口性能调优的方法全解