Damien Asked: 2017-03-15 23:27:30 +0800 CST2017-03-15 23:27:30 +0800 CST 2017-03-15 23:27:30 +0800 CST Innodb_table_lock状态 772 谁能向我解释如果我设置 innodb_table_locks=ON 或 innodb_table_locks=OFF 会发生什么?行动的利弊。 谢谢。 mysql windows-server 1 个回答 Voted Best Answer Peter R 2017-03-16T05:13:48+08:002017-03-16T05:13:48+08:00 使用表锁定的好处 每次对表进行更改时,MySQL 最终必须将该更改提交到磁盘。对具有索引的表进行更改需要更多工作,因为 MySQL 需要执行更新索引的额外步骤。当您一次对数据进行大量更改时,例如通过对关键(即代码)字段执行更新,这一额外步骤的效果可能会更加复杂。在这种情况下,MySQL 可能不得不执行数百甚至数千次写操作。 当我们锁定一个表时,MySQL 不会更新锁定表的索引键,直到我们解锁它。这可以节省大量时间。根据索引的复杂性,明智地使用表锁定可以大大加快速度。 表锁定的缺点 表锁定仍然允许多个进程同时从一个表中读取,但如果一个进程想要写入一个表,它必须首先获得独占访问权限,这意味着它可能必须等待其他会话先完成对表的操作。在写入操作期间,所有其他想要访问该特定表的会话必须等到写入完成。 2.当磁盘可用空间不足并且需要在会话继续之前腾出空间时,表锁定会遇到麻烦。当发生这种情况时,所有想要访问受影响的表的会话都将等待,直到有更多的磁盘空间可用。 运行时间较长的 SELECT 语句会阻止其他会话同时更新表,从而使其他会话显得缓慢或无响应。当一个会话等待对表的独占访问以进行更新时,发出 SELECT 语句的其他会话将在它后面排队,即使是只读会话也会降低并发性。
使用表锁定的好处 每次对表进行更改时,MySQL 最终必须将该更改提交到磁盘。对具有索引的表进行更改需要更多工作,因为 MySQL 需要执行更新索引的额外步骤。当您一次对数据进行大量更改时,例如通过对关键(即代码)字段执行更新,这一额外步骤的效果可能会更加复杂。在这种情况下,MySQL 可能不得不执行数百甚至数千次写操作。
当我们锁定一个表时,MySQL 不会更新锁定表的索引键,直到我们解锁它。这可以节省大量时间。根据索引的复杂性,明智地使用表锁定可以大大加快速度。
表锁定的缺点
2.当磁盘可用空间不足并且需要在会话继续之前腾出空间时,表锁定会遇到麻烦。当发生这种情况时,所有想要访问受影响的表的会话都将等待,直到有更多的磁盘空间可用。