视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
Mysql查询很慢卡在sendingdata的原因及解决思路讲解
2020-11-09 21:15:59 责编:小采
文档


因为编写了一个Python程序,密集的操作了一个Mysql库,之前数据量不大时,没发现很慢,后来越来越慢,以为只是数据量大了的原因,但是后来慢到不能忍受了,查了半天,索引能用的都用上了,执行一次还是要3到4秒,不能忍受了。

于是把一些可以缓存的查询全部用redis缓存了起来,大大加速了应用。

但是还是有一些没办法缓存的,或者说,每次查询都是不一样的结果的就没办法了。用navicat的查询概况可以看到卡住的地方是在:Sending data一段,用时3.5秒,占了99%的查询时间。

在网上查了一些,有些是因为sql语句的问题,但是我这个完全没有用到varchar,也没用到in方法。

于是想是不是表太大了,可能没有缓存到内存中,于是先查mysqld进程占的内存,才50多M,明显太少了,那张表的实际容量有200多M,这个可以在navicat的对象一栏看到,应该是每次查都是从磁盘读取,所以很耗费时间,于是查看win10的磁盘IO,发现确实是这样,磁盘IO达到了100%,还是固态硬盘,每秒读取80M左右,难怪这么慢了。

于是查了mysql的配置文件,发现有一项配置才32M,调成512M,重启mysql,搞定这次从3.5秒变成了0.76秒了。

配置项是:

innodb_buffer_pool_size=32M

这是mysql5.7默认的,改成512或1024,再重启即可,看你的硬件配置。

总结

下载本文
显示全文
专题