把一个sql语句从120秒优化到0.002秒,把点击登录按钮跳转到首页面的时间从35秒优化到5秒内。
1、问题分析:
1.1、打开系统登陆页面,右击->检出->Network 。然后点击登录按钮等登陆完成并跳转到首页面后(大概耗时35秒),
查看Network 页面,发现有2个请求特别慢一个耗时10秒,一个耗时20秒。
初步分析是系统内部逻辑慢,或者数据库查询慢,又因为电脑重启,系统就会变快,所以优先排查数据库
2、数据库排查
2.1、查看慢查询相关参数
打开数据库管理工具->进入查询页面
执行 show variables like ‘slow_query%’;
结果显示slow_query_log为ON;证明慢SQL是开启状态,记录slow_query_log_file的文件名。
接着执行show variables like ‘long_query_time’;
结果显示long_query_time为10.000000;证明超过10秒的慢sql会记录到slow_query_log_file对应的文件中
2.2、分析慢日志
在我的电脑中全局搜索slow_query_log_file的文件名查找文件
通过分析慢SQL文件发现有一个sql请求很频繁、耗时很长,并且随着数据的增加耗时也在增加,目前单次查询耗时在120秒左右。
通过sql语句和数据结构的分析发现查询的表并没有加索引,然后根据经验尝试在查询字段加索引。
加索引后单次查询耗时在0.002秒左右。
3、测试
系统登陆从35秒降到5秒内,其他操作的相应速度也有明显的提示
4、进一步优化排查
打开数据库管理工具->进入查询页面
执行 set global slow_query_log_file=‘存放目录/slow_query.log’; 修改慢sql日志存放位置
执行 set global long_query_time=1; 把慢sql的记录时间从10秒改为1秒
执行 select sleep(3); 打开slow_query.log发现SQL已记录证明设置生效
操作整体系统,然后打开slow_query.log并没有记录新的数据,说明目前后台系统查询都小于1S