我在linux系统上使用Percona MySQL 5.5.28 MySQl服务器,带有ext4文件系统和23 GB ram,其中15 GB大约分配给MySQL .... 我发了一个类似下面的查询
INSERT IGNORE INTO table_A SELECT field1,field2,....fieldn FROM table_B;
以上查询是锁定table_B .... 由于哪个更改查询我稍后在table_B锁定了。
以上两张表是Innodb和我的整个数据库操作只是Innodb存储引擎.....
有人可以告诉我为什么MySQL锁定table_B已锁定在这里吗?
如果可能请告诉我何时以及哪些查询将锁定MySQL中的表?
答案 0 :(得分:0)
这是一个老问题,但万一有人像我一样偶然发现它,简短的回答是添加SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;在查询有时有效之前。
更多信息: How to improve INSERT INTO ... SELECT locking behavior
请注意,自MySQL 5.6.3起,不推荐使用上述innodb_locks_unsafe_for_binlog方法。 (http://dev.mysql.com/doc/refman/5.7/en/innodb-parameters.html#sysvar_innodb_locks_unsafe_for_binlog)。