开发者社区> 问答> 正文

一个mysql慢查询问题

请教一个慢查询的问题,线上每天都会偶发的有一些慢查询,explain分析之后发现大部分查询都用到了索引,并且返回的数据集也比较小,但是查询结果通常耗费2s+。以下图片是一个explan 结果:
399994397456384328

可能大家看不清图片,我简单描述一下,这个表不到100W数据,一个单表查询使用到了联合索引(其实只需要uid就够了),扫描数据大概200多行,返回1行。但是查询结果耗时2s。当然再次执行就无法重现了,因为开启了query_cache。
线上配置自建机房的虚拟机,机械硬盘,mysql是innodb引擎,是一主一从,慢查询是在主库上的。主库“innodb_buffer_pool”是8个G。

PS:先说下我的分析,类似的查询,我使用sql_no_cache排除query_cache的干扰,第一次执行会很慢,再次执行就会很快。从show profile上看耗时也都是在“sending data“上。我怀疑是虚拟机的硬盘IO有点问题,因为第一次数据从硬盘load到buffer_pool,所以比较慢,第二次无论有没有用到index,都是从buffer_pool中直接检索数据,所以比较快。但是从硬盘扫描200多行数据也实在是太慢了吧,所以怀疑是硬盘问题。(另外我们每天都会全量备份数据,而innodb_old_blocks_time设置的是0,所以可能每天都会把buffer pool中的热数据给洗一次。。。,是不是也是坑?!)。如果是硬盘问题,我该如何确认我的想法呢?

展开
收起
keyganker 2016-10-09 11:07:27 2885 0
1 条回答
写回答
取消 提交回答
  • 用索引的,查询索引占比30%一下的时候会比较快。多了反而慢

    2019-07-17 20:14:43
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
搭建电商项目架构连接MySQL 立即下载
搭建4层电商项目架构,实战连接MySQL 立即下载
PolarDB MySQL引擎重磅功能及产品能力盛大发布 立即下载

相关镜像