在磁盘上写入时的高IO率和阻塞的SQL INSERT语句

时间:2011-03-23 06:57:32

标签: mysql io wait disk scheduler

我遇到了高IO等待的问题。我用以下硬件和软件测试了一些东西

-physical machine(HP ProLiant),Debian 5,MySQL 5.1,硬件raid,ext3-fs
- VMware ESX 4(HP ProLiant)上的虚拟机,Debian 5,MySQL 5.1,硬件raid,ext3-fs
- Xen 4上的虚拟机,Debian 6,MySQL 5.5,软件raid,ext3-fs

现在发生了这种情况:在磁盘上复制一些大文件时,我可以看到“top”中的等待率很高,而其他进程将被阻止。例如:

dd if = / dev / urandom of =。/ foo.txt count = 1000 bs = 1M(用于创建大文件) cat foo.txt foo.txt foo.txt foo.txt foo.txt> foo.new(发送到/ dev / null仅在磁盘上读取)

当'cat'正在运行时,我无法启动另一个复制过程。另外(这是最大的问题)在mysql数据库中运行的INSERT语句被阻塞,直到它们正确退出。使用'innotop',我可以在状态'释放项目'中查看mysql中的许多进程(在MySQL 5.5中这是状态'查询结束')直到'cat'结束。执行mysqldump时也会阻塞INSERT语句。我现在应该不再进行数据库备份吗?基于ext3和调度程序的所有系统都设置为'cfg'。我已经尝试了'截止日期'它似乎有点帮助,但不是所有的情况。我还是找不到原因!?这个问题似乎很复杂:-( 看起来大量的写作会导致这个问题。调度程序可能是一个糟糕的IO处理吗?

2 个答案:

答案 0 :(得分:0)

这可能与您在控制器卡上的缓存有关。您需要确保缓存正在运行,否则会发生这种情况,如果您正在运行虚拟机。

如果您还没有,here就是“HP阵列配置实用程序CLI for Linux”的地方

有时它可以报告电池没有充电,在这种情况下你应该确保你有最新的固件,因为这可以解决充电过程中的一些错误。

答案 1 :(得分:0)

我找到了一个改变linux io调度程序(cat /sys/block/[dev]/queue/scheduler)的提示。这有点帮助,但我相信,当某些并行任务(或进程)具有如此大的不同工作负载时,将无法解决这个问题。