这里我们有一个 x64 Debian Lenny,上面装有 MySQL 5.1.47 和一些 InnoDB 数据库。 ibdata 文件和其他文件位于同一文件系统 (ext3) 上。我注意到,在某些情况下,MySQL 进程列表中有许多进程卡在“释放项目”状态。当我在 shell 上执行以下操作时会发生这种情况(file1 和 file2 约为 2.5gb)
cat file1 file2 >new_file
或者执行以下SQL语句
SELECT 'name' AS col UNION SELECT col FROM db_name.table_name INTO OUTFILE ('/var/xxx/yyy')
当这两件事之一正在运行时,我可以看到许多 MySQL 进程以“释放项目”状态无限运行(我正在使用 innotop)。当终止这个 shell 进程(或 SQL 语句)时,这些被阻止的事务就会消失。
在互联网上我发现了一些禁用 InnoDB 自适应哈希索引和公共(public)查询缓存的提示,但这没有帮助。有人有相同经历吗?
问候
最佳答案
我们发现打开截止时间 i/o 调度程序对于防止我们的数据库在文件系统上的外部负载期间陷入饥饿有很大帮助。尝试一下
echo deadline > /sys/block/sda/queue/scheduler
并测试问题是否变小。 (将 sda
替换为您的数据库所在的设备)
关于mysql - I/O 操作阻塞 mysql 事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4469606/