【发布时间】:2014-02-24 17:33:14
【问题描述】:
我在 InnoDB 表上使用 LOAD DATA INFILE,我在 SHOW PROCESSLIST 中看到“系统锁定”状态。在这种情况下,InnoDB 究竟锁定了什么锁?如何查看被锁定的内容?
【问题讨论】:
-
SHOW ENGINE INNODB STATUS将在它输出的大量信息中报告锁。
我在 InnoDB 表上使用 LOAD DATA INFILE,我在 SHOW PROCESSLIST 中看到“系统锁定”状态。在这种情况下,InnoDB 究竟锁定了什么锁?如何查看被锁定的内容?
【问题讨论】:
SHOW ENGINE INNODB STATUS 将在它输出的大量信息中报告锁。
您的问题有两个部分:LOAD DATA INFILE 实际上在 InnoDB 中锁定了什么,以及如何检查锁定。
LOAD DATA INFILE 命令基本上只是执行多行INSERT 的一种更有效的方法,它会锁定与INSERT 完全相同的东西。在处理LOAD DATA INFILE 时,对于正在加载到的表中的每个索引,正在加载的行中的键被排他行锁锁定。
当LOAD DATA INFILE 运行时,您将能够看到一些关于它被SHOW ENGINE INNODB STATUS 锁定的总体统计信息。如果您启用InnoDB lock monitor,您可以查看有关每个单独锁定的更多详细信息(直到某一点)。
【讨论】:
PRIMARY KEY(或合适的UNIQUE KEY),则会将隐藏的“行ID”字段添加到表中并用于聚集键。通常你应该总是定义一个PRIMARY KEY,并且可能会延迟添加其他键,直到数据加载完成。