这里我们有一个带有MySQL 5.1.47的x64 Debian Lenny和一些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自适应哈希索引和常见查询缓存的提示,但这没有用。是否有人有相同的经历?
此致
答案 0 :(得分:2)
我们发现启用截止日期的i / o调度程序非常有助于防止我们的数据库在文件系统上的高外部负载期间挨饿。试试
echo deadline > /sys/block/sda/queue/scheduler
并测试问题是否更小。 (替换您的数据库所在设备的sda
)
答案 1 :(得分:1)
稍微退一步,你做过一些基本的InnoDB调整吗? MySQL默认值可能非常有限。一个很好的概述:
http://www.mysqlperformanceblog.com/2007/11/01/innodb-performance-optimization-basics/
答案 2 :(得分:0)
有趣的是:
我不明白这种行为:在旧数据库中插入会让这些“释放项目”进程出现,但是插入新数据库(旧数据库的完整副本)可以吗?