我有一个单一的、未复制的 MySQL 服务器。
我们遇到了一个问题,其中 INSERT INTO ... SELECT 语句导致对原始表的写入锁定。
源表在一个数据库中。目标表是另一个数据库中的临时表。
遵循此问题已接受答案的建议:How to improve INSERT INTO ... SELECT locking behavior
我在my.cnf中更改了以下三个配置变量并重启了服务器:
innodb_autoinc_lock_mode=2
binlog_format=row
transaction-isolation=READ-COMMITTED
这似乎使问题变得更糟,尽管在这种情况下相关性可能不是因果关系。
如何防止这种写锁定?
最佳答案
在我看来,您的事务隔离级别似乎不允许在对相同数据进行顺序读取时进行插入。
了解这可能是一件好事。 MySQL 不会在这里无缘无故地阻塞。这只是意味着您的一个语句正在读取的数据在原子操作期间可能不会更改。因此 INSERT 没有被授予插入数据的权限,否则这些数据会更改您现在插入到临时表中的数据。
可以看看this page从 MySQL 的角度描述有关事务隔离的所有知识。
关于mysql - 我如何解决 MySQL INSERT INTO...SELECT 导致 SELECTed 表的写锁定?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15977008/