请教一个慢查询的问题,线上每天都会偶发的有一些慢查询,explain分析之后发现大部分查询都用到了索引,并且返回的数据集也比较小,但是查询结果通常耗费2s+。以下图片是一个explan 结果:
可能大家看不清图片,我简单描述一下,这个表不到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中的热数据给洗一次。。。,是不是也是坑?!)。如果是硬盘问题,我该如何确认我的想法呢?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。