mysql 5.7单表300万数据,性能严重下降,如何破?

查看:284
本文介绍了mysql 5.7单表300万数据,性能严重下降,如何破?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

环境:
DB: mysql 5.7.xx
OS: windows server 2012 r2
CPU: E3 1220-V5
内存: 4G。

数据库配置(基本上是默认配置):
join_buffer_size = 128M
sort_buffer_size = 2M
read_rnd_buffer_size = 2M
innodb_buffer_pool_size = 128M

表现:

有个表service_log,
其中有ID, DIAL_NUMBER, contact_name, contact_result, remark, CREATE_TIME等20多个常规字段。ID是PK,在contact_name,create_time等列上建有单独索引。

此表每日产生的新数据大概在1万左右,目前有数据近300万。

有一个查询,查询字段较多:
select id, dial_number, contact_name ....
from service_log
where create_time between '2016-10-01' and '2016-10-02'

从300万数据中,查询出近8000条数据,耗时大概在40秒左右。
查看执行计划,已经用了create_time上的索引。

显然这个效率很难接受,但是索引已经用上,实在想不出其他办法了。

请问除了分区,还有什么好办法吗?

解决方案

innodb_buffer_pool_size 这个太小了改成2G先试试,
磁盘和内存的性能差了几十倍,128M让你的数据操作对磁盘进行了IO, innodb_buffer_pool_size这个加大应该就好好多了
这个和索引已经没有关系了,是磁盘io造成的问题,你看看任务管理器的磁盘性能,随着buffer加大,磁盘负载会下降,这个就和系统内存小会卡一样,给mysql的内存小也会卡。别的也会造成卡,应该没有innodb_buffer_pool_size这个明显

这篇关于mysql 5.7单表300万数据,性能严重下降,如何破?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆