背景:公司Saas产品列表页接口响应时间长,列表页速度体验差,亟待优化。
一、接口性能诊断工具Arthas
1.下载及安装详见以下链接:https://alibaba.github.io/arthas/manual-install.html
2.按1所述步骤,启动后弹出页面,点击connect即可,如下图
3.输入命令:trace -j 类的完整路径名 方法名 ,如下图
4.参数解释
红色标注的是整个方法中最耗时的方法;
扫描二维码关注公众号,回复:
9306512 查看本文章
min是方法执行最少的时间,max是方法执行最多的时间,total是方法执行的总时间,count是方法执行的次数
二、优化方法
1.sql语句优化(mysql数据库)
使用具体的列而不是使用*;
先EXPLAIN分析一下: sql_no_cache:不使用mysql缓存
查看缓存的命令:SHOW VARIABLES LIKE '%cache%';
SHOW STATUS LIKE '%qcache%';
EXPLAIN
SELECT sql_no_cache c.*,
u.thumbnail as image_url,
u.category_id as category_id,
u.barcode as barcode
FROM tb_product AS u
RIGHT JOIN
tb_outstock_product AS c
ON
u.id = c.product_id
WHERE c.del = 0 AND c.corpid = 1 AND c.out_warehouse_id = 1157
ORDER BY CONVERT(c.product_name USING gbk) ASC;
结果如下:没有使用临时表
如果使用临时表的话,则要设法不用临时表,详见[产生临时表的场景]https://www.cnblogs.com/tlijian/p/3750795.html。
2.程序优化,根据Arthas提示的方法耗时进行优化,将耗时多的方法针对性优化,同时尽量减少数据库的连接操作。
3.mysql有缓存,相同的sql语句会查询缓存,但是最好还是减少查询相同sql语句。