mysql - 我如何解决 MySQL INSERT INTO...SELECT 导致 SELECTed 表的写锁定?

标签 mysql locking

我有一个单一的、未复制的 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/

相关文章:

java - 什么是 ReentrantReadWriteLock 的升级/降级?

c - 实现 net-snmp 子代理 (linux/C)

php - 用get方法插入是可以的,而post不是。(关于PHP/PDO/HTML)

php - 许可应用程序的服务器安全性

Mysql 类似 '%search%' 找不到连续列

postgresql - 带有可序列化隔离的 PostgreSQL 9.2.1 中的谓词锁定

asp.net-mvc-3 - C# lock 关键字,我想我用错了

synchronization - 无硬件支持的锁定

mysql - 将 sql 模式文件的 git diff 转换为应用/撤消 sql 脚本

mysql - Laravel 4.2 查询生成器中如何嵌套联接