表锁定如何影响表引擎从MyISAM到InnoDB的变化



因此,我被要求将生产数据库中几个表的引擎从MyISAM更改为InnoDB。我正试图弄清楚这将如何影响生产中的使用(因为服务器无法承受停机时间)。

我读到一些相互矛盾的信息。我读到的一些信息表明,表已锁定,在转换完成之前不会接收更新(IE,更新不会排队,只是在完成之前丢弃)。

在其他地方,我读到当表被锁定时,插入和更新将被排队,直到操作完成,然后执行写入操作。

那么这里的故事到底是什么呢?

这直接来自手册:

在大多数情况下,ALTER TABLE会对原始桌子MySQL等待其他正在修改表的操作,然后继续。它将更改合并到副本中,删除原始表,并重命名新表。当ALTER TABLE为执行时,其他会话可以读取原始表。更新并写入ALTER table操作之后开始的表开始被搁置,直到新表准备好,然后自动重定向到新表,没有任何失败的更新。

所以,第二名获胜。他们不是"失败",而是"停滞不前"。

后者是正确的。对正在更改的表的所有查询都将被阻止,直到更改完成,并在更改完成后进行处理。请注意,这包括读取查询(SELECT)和写入查询(INSERT、UPDATE、DELETE)。

最新更新