【问题标题】:what lock will mysql issue for 'load data infile' on innodb?mysql 会为 innodb 上的“加载数据文件”发出什么锁?
【发布时间】:2014-02-24 17:33:14
【问题描述】:

我在 InnoDB 表上使用 LOAD DATA INFILE,我在 SHOW PROCESSLIST 中看到“系统锁定”状态。在这种情况下,InnoDB 究竟锁定了什么锁?如何查看被锁定的内容?

【问题讨论】:

  • SHOW ENGINE INNODB STATUS 将在它输出的大量信息中报告锁。

标签: locking innodb


【解决方案1】:

您的问题有两个部分:LOAD DATA INFILE 实际上在 InnoDB 中锁定了什么,以及如何检查锁定。

LOAD DATA INFILE 命令基本上只是执行多行INSERT 的一种更有效的方法,它会锁定与INSERT 完全相同的东西。在处理LOAD DATA INFILE 时,对于正在加载到的表中的每个索引,正在加载的行中的键被排他行锁锁定。

LOAD DATA INFILE 运行时,您将能够看到一些关于它被SHOW ENGINE INNODB STATUS 锁定的总体统计信息。如果您启用InnoDB lock monitor,您可以查看有关每个单独锁定的更多详细信息(直到某一点)。

【讨论】:

  • 这正是我想要的,谢谢。仔细检查一下,由于'LOAD DATA INFILE'和'INSERT'锁定相同,那么如果表上没有索引,就不会有锁,对吗?
  • InnoDB 中总是有一个聚集键。如果您没有指定PRIMARY KEY(或合适的UNIQUE KEY),则会将隐藏的“行ID”字段添加到表中并用于聚集键。通常你应该总是定义一个PRIMARY KEY,并且可能会延迟添加其他键,直到数据加载完成。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-18
  • 1970-01-01
相关资源
最近更新 更多