mysql - I/O 操作阻塞 mysql 事务

标签 mysql locking innodb

这里我们有一个 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/

相关文章:

mysql - 从带有外键的表中删除

c++ - 共享内存中彼得森锁的问题

service - 什么是分布式锁服务器

mysql - 使用外键删除时从另一个表中删除

Mysql错误代码1452,两个表具有不同的数据库引擎

java - JDBC 表不存在但确实存在

mysql - 使用其他列中的值更新列

javascript - 如何使用 php 查询处理数据添加多字段输入

MySQL原子操作和表锁定

mysql - 删除时对 c :n with combined PK 的空字段设置空约束