mysql skip remarks_Mysql性能调优笔记(第一部分)

吴老的《selenium webdriver 实战宝典》出版了!

项目后台用mysql存储数据,开始运行时数据量比较少,各个页面查询的性能都比较可观,所以没有关心性能的问题,然而慢慢的数据量越来越大,开始发现首页和一些查询页面的性能明显不容乐观,早上也给领导做了一次展示,其余功能实现都不错,就是查询的性能有待提高。

对于mysql调优自己没有什么经验,苦思之余想起了吴老,我是吴老光荣之路的学生,之前做dubbo的接口测试也是没有思路向吴老询问参考了他给的一些测试dubbo接口的经验,所以马上就在qq上找了吴老:

282ca5587799fe2f68b2e56f8341548f.png

我其实很想快点解决,所以想早点定下解决方案:

42433d2ed9d545db1da74256e2cebadf.png

1.  当我打开页面发现首页加载时间很长,用f12工具观察耗时为:

时间太长早就超过用户可以忍受的等待范围了,最耗时的请求:

a7ff788f35eab853dbdc978fbf613823.png

Page的获取主要在等待上占用太长时间,花了26s,而首页主要的功能为从数据库中获取一系列的信息进行展示,所以初步可以推断从数据库查数据这块等待了很久。

842c0b4437534d45151c7b189cb7e1ad.png

由上面我们可以知道页面响应慢,最主要的瓶颈点跟数据库查询有很大关系,所以在吴老建议慢查询分析后,我就开启了mysql慢查询功能看看具体是哪些sql语句导致慢。

这里首先简单说下mysql慢查询开启的方法:

1.  进入mysql客户端,我们用如下命令,可以看到我们的mysql有没有开启慢查询等信息:

show variables like'log_slow_queries';

show variables like'long_query_time';

683ca43f8ab9305371d6e8e53d5e8ae7.png

发现慢查询为off关闭状态,说明没有开启慢查询,我们要把它打开

1.  进入mysql安装路径下,找到my.ini文件(我是在本地调试,在windows机器上)

在my.ini文件的[mysqlId]下,添加如下语句

log-slow-queries="D:/mysql/log/mysql-slow.log"  #慢查询sql日志

long_query_time=5  #多长时间为慢sql

49cd78950fb51a4161bcc6e4d2988278.png

1.  重启mysql服务,windows下的步骤为

a:计算机下的管理

36aa3b23e6ae480c69a92030532d16f5.png

b:点击管理后,找到服务和应用程序

d23f6d40c212a44706ce1901a0db2469.png

c:点击服务和应用程序,进入后找到服务

518b9bc4a69919d4c7f099fac7cfdefb.png

d:在服务中找到MySQL服务,进行重启即可

74de89feb06a9b56234cb244b08ea49c.png

1.  此时在去mysql中看慢查询启动状态

show variables like'log_slow_queries';

show variables like'long_query_time';

03dda5a39cce6de162880ecfb05abcd7.png

发现状态为ON,表示已经启动慢查询。

1.  我们已经打开了慢查询,此时我们进行慢sql收集

此时我们点击首页页面,待页面刷新成功后,此时进入sql慢查询日志目录下(我们在上面配置的是log-slow-queries="D:/mysql/log/mysql-slow.log"),找到文件mysql-slow.log,点击f5刷新一下,便能看到log中存入了数据

2.  此时我们点击首页页面,待页面刷新成功后,此时进入sql慢查询日志目录下,找到文件mysql-slow.log,点击f5刷新一下,便能看到log中存入了数据

选取了耗时最长的sql(耗时14秒执行)进行了分析:

00ce3bfd9332405c48d52de5ca511e1e.png

Sql语句为:

select this_.id as id1_3_0_,this_.create_by as create17_3_0_, this_.create_date as create2_3_0_,this_.del_flag as del3_3_0_, this_.remarks as remarks4_3_0_, this_.update_by asupdate18_3_0_, this_.update_date as update5_3_0_, this_.case_result ascase6_3_0_, this_.case_type as case7_3_0_, this_.cost_time as cost8_3_0_,this_.ctah_auto_test_id as ctah9_3_0_, this_.execute_by as execute10_3_0_,this_.execute_date as execute11_3_0_, this_.ip as ip12_3_0_, this_.name asname13_3_0_, this_.port as port14_3_0_, this_.status as status15_3_0_,this_.vs_node as vs16_3_0_ from ctah_auto_result this_ where this_.del_flag='0'and this_.case_type='pollScript' and this_.status='1' order bythis_.execute_date desc;

将这条sql语句直接放入mysql工具中执行,发现耗时在14s左右:

1eac070be4dd262a4e85c3fe3889563f.png

1.  分析sql语句-优化只查询需要的字段

观察到我们之前界面分析中page获取时数据大小约为130多M,我只是做个简单的图表展示:展示任务失败数、总次数:

17fa514be7426c1a550785321d8102c2.png

而这里的sql却将表中所有的字段都查询出来了:

fff35dd4cd698168dea6a2e95bbd44e5.png

增加了不必要的流量消耗和时间消耗,然后去观察sql表,发现 :

4b2457de8b7660d92e2f634072c60885.png

该数据表中存在一个文本字段,查询sql发现该字段存储了大量的任务异常信息,包括堆栈信息,我们查询时将这些不必要的字段也查询出来了,是不是可以去掉,于是对sql语句进行了优化,将select后面查询的内容由全表变成了:

hour(execute_date) as h , count(*)我需要的两个字段,即任务执行总数和执行时间,发现这样优化后,首页的性能有了明显的提高,在mysql工具中查询得到的响应时间很快,1w条不到1s就能查询出来:

Sql优化后,放到工程中去跑,发现首页的性能有所提高,但是还是在用户不可接受范围内,差不多需要8s才能加载出来。

(待续。。。。。)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值