学习啦 > 学习电脑 > 电脑故障 > 电脑故障现象 > 系统变慢 >

MySQL Sending data导致查询很慢问题怎么解决

时间: 加城1195 分享

  我们使用电脑和手机时候最不能忍受就是设备又卡又慢了,严重影响我们工作或者游戏体验。对于数据库,有用户遇到MySQL Sending data导致查询很慢问题,怎么解决呢?这篇文章主要介绍了解决MySQL Sending data导致查询很慢问题的方法与思路,感兴趣的小伙伴们可以参考一下

  【问题现象】

  使用sphinx支持倒排索引,但sphinx从mysql查询源数据的时候,查询的记录数才几万条,但查询的速度非常慢,大概要4~5分钟左右

  【处理过程】

  1)explain

  首先怀疑索引没有建好,于是使用explain查看查询计划,结果如下:

  从explain的结果来看,整个语句的索引设计是没有问题的,除了第一个表因为业务需要进行整表扫描外,其它的表都是通过索引访问

  2)show processlist;

  explain看不出问题,那到底慢在哪里呢?

  于是想到了使用 show processlist查看sql语句执行状态,查询结果如下:

  发现很长一段时间,查询都处在 “Sending data”状态

  查询一下“Sending data”状态的含义,原来这个状态的名称很具有误导性,所谓的“Sending data”并不是单纯的发送数据,而是包括“收集 + 发送 数据”。

  这里的关键是为什么要收集数据,原因在于:mysql使用“索引”完成查询结束后,mysql得到了一堆的行id,如果有的列并不在索引中,mysql需要重新到“数据行”上将需要返回的数据读取出来返回个客户端。

  3)show profile

  为了进一步验证查询的时间分布,于是使用了show profile命令来查看详细的时间分布

  首先打开配置:set profiling=on;

  执行完查询后,使用show profiles查看query id;

  使用show profile for query query_id查看详细信息;

  结果如下:

  从结果可以看出,Sending data的状态执行了216s

  4)排查对比

  经过以上步骤,已经确定查询慢是因为大量的时间耗费在了Sending data状态上,结合Sending data的定义,将目标聚焦在查询语句的返回列上面

  经过一 一排查,最后定为到一个description的列上,这个列的设计为:`description`varchar(8000) DEFAULT NULL COMMENT '游戏描述',

  于是采取了对比的方法,看看“不返回description的结果”如何。show profile的结果如下:

  可以看出,不返回description的时候,查询时间只需要15s,返回的时候,需要216s,两者相差15倍

  补充:解决系统变慢的常用技巧方法

  1、在我的电脑窗口,右击要清理的盘符―“属性”―“清理磁盘”--勾选要删除的文件--确定--是。

  2、右键浏览器e――属性――点2个删除1个清除(都要逐一确定)――确定 。

  3、把C:\WINDOWS\Prefetch(预读文件)把里面的文件全部删除

  4、用优化大师或超级兔子清理注册表和垃圾文件。

  5、“开始”――运行中输入msconfig――确定――启动――除了输入法ctfmon以外的勾全去掉。

  6、右键我的电脑”――属性――点高级――点启动和故障恢复中的设置――去掉所有的勾――写入调试信息选择“无”――确定――点高级下面错误报告――点禁用――2次确定。

  7、“开始”..打开控制面板中的文件夹选项..点查看..点去末项自动搜索文件夹前面的勾..确定。

  8、右键我的电脑――属性――硬件――设备管理器――双击IDE控制器――次要通道――高级设置――传送模式都选DMA――设备类型选无――确定――主要通道也同样设置――确定。

  9、右键C盘进行磁盘清理和其它选项中的系统还原清理。

  10、删除不用的程序软件。


查询很慢问题怎么解决相关文章:

1.ppt2013实用技巧怎么解决ppt保存速度慢的问题

2.DNS解析故障及修复方法

3.wifi为什么网速慢

4.无线wifi网速很慢怎么解决

5.上网慢怎么检查DNS设置 上网慢检查DNS设置的方法

4036063