我试图了解我在使用 MySQL 5.5 服务器时遇到的问题。
该服务器托管许多数据库。每天在某个特定时间,一个进程会对该数据库中的两个表运行一系列插入操作。此过程持续 5 到 15 分钟,具体取决于插入的行数。
这个过程完美运行。但它有一个非常意想不到的副作用。所有其他插入和更新在与被插入的两个无关的表上运行,只是坐下来等待进程停止。该数据库之外的读写工作正常,SELECT 语句也正常。
那么单个表怎么可能阻塞数据库的其余部分而不是整个服务器(由于加载)?
一点背景:-
插入的表是具有 10 - 2000 万行的 MyISAM。
MySQL 是 Percona V5.5,它为一个运行在 Debian 上的从属服务器提供服务。
插入记录的进程不需要显式锁定。
没有任何插入语句不会从任何其他表中选择数据。它们也是 INSERT IGNORE 语句。
附加信息:
发生这种情况时,PROCESS LIST 中没有 LOCK 表条目,并且插入导致此问题的记录的处理器不会发出任何表锁。
我已经调查了表锁定的常见原因,并且我认为我已经将它们排除在外。这种行为要么与 MySQL 的工作方式有关,要么与拥有大型数据库文件的怪癖有关,甚至可能与 OS/文件系统有关。