【问题标题】:insert ignore .....select is locking the table inside selectinsert ignore .....select 正在锁定 select 内的表
【发布时间】:2013-10-05 13:41:47
【问题描述】:

我在 Linux 系统上使用 Percona MySQL 5.5.28 MySQl 服务器,带有 ext4 文件系统和 23 GB 内存,其中大约 15 GB 分配给 MySQL.... 我发起了一个类似下面的查询

INSERT IGNORE INTO table_A SELECT field1,field2,....fieldn FROM table_B;

上面的查询是锁table_B.... 由于我稍后在 table_B 上触发的更改查询被锁定。

以上两个表是 Innodb 的,我的整个 db 操作只是 Innodb 存储引擎而已.....

谁能告诉我为什么 MySQL 锁定 table_B 已经锁定在这里?

如果可能,请告诉我何时以及哪些查询会锁定 MySQL 中的表?

【问题讨论】:

标签: mysql sql innodb percona


【解决方案1】:

这是一个老问题,但如果有人像我一样偶然发现它,简短的回答是添加 SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;在查询有时有效之前。

更多信息: How to improve INSERT INTO ... SELECT locking behavior

请注意,提到的 innodb_locks_unsafe_for_binlog 方法自 MySQL 5.6.3 起已弃用。 (http://dev.mysql.com/doc/refman/5.7/en/innodb-parameters.html#sysvar_innodb_locks_unsafe_for_binlog)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-12
    • 1970-01-01
    • 2012-08-25
    • 1970-01-01
    • 2011-02-08
    • 2017-03-29
    相关资源
    最近更新 更多