MySQL一个奇怪的IO问题

有一台机器,OS是CentOS release 5.8(2.6.18-308.1.1.el5.centos.plus), MySQL是5.5.27,通过RPM安装。表全是InnoDB(除了mysql的系统表)。MySQL所在的文件系统是xfs。

下面这个SQL语句,执行一个多小时多没执行完:

select count(*) from (select sum(count) as sum from top_no_ds_query_youku where query_date between '2012-11-01' and '2012-11-20'group by query) as temp_table;

cpu负载不高,io wait在12.5%左右。

更奇怪的是,有2-3条这样的SQL语句一起执行的时候,io wait会到30%左右,于是整个操作系统会变得特别慢,慢到sshd不接受新的连接。这个太要命了。但是现有的ssh连接可以clone,于是我顺利的用现有的ssh连接clone之后kill掉query。在kill之前我用vmstat看了一下,发现大约有9个进程处于uninterruptible sleep,running队列的长度只有1左右。

然后呢,我找了另外一台机器做mysql slave。无RAID,SATA硬盘。内存也比master小,只有8G。OS是fedora 17,kernel是3.6.3-1,文件系统是ext4。MySQL是5.5.28。于是我就把master的my.cnf复制过去,改了一下innodb的buffer pool的大小和server id,其它都没动,然后启动,和主库进行replication。

replication结束后,我在从库上测试这个SQL语句,结果只花了20秒就执行完了。期间IO非常正常,在0.4%以下。IO写入量高峰期在60MB/s左右,tps最高在600左右。

这算是BUG吗?谁的BUG呢?

此博客中的热门博文

在windows下使用llvm+clang

少写代码,多读别人写的代码

tensorflow distributed runtime初窥