【发布时间】:2014-03-19 15:00:21
【问题描述】:
我有一个包含超过 1.6 亿个条目的表,它的表引擎有误,所以我要更换引擎。 当我在没有任何准备的情况下执行此操作时,由于我的缓冲区大小而出现错误,因为行锁太多
mysql> ALTER TABLE foobar ENGINE=MyISAM;
ERROR 1206 (HY000): The total number of locks exceeds the lock table size
我现在想在此操作之前锁定整个表并在之后解锁整个表。
mysql> LOCK TABLES foobar WRITE;
我的问题:mysql 服务器是否注意到表锁已经处于活动状态并跳过行锁,或者它锁定了表并且现在还会再次锁定每一行,我会再次遇到同样的错误?
我也愿意接受任何其他建议如何以最快的方式更改如此大(和更大)表的引擎:)
【问题讨论】:
-
检查 pt-online-schema-change 工具。它也应该可以解决您的问题。但是 MyISAM……你不关心你的数据,是吗? :)
-
感谢您提供有关该工具的建议!我更喜欢在没有任何第三方工具的情况下更换引擎,但也许没有其他方法可以解决这个问题。顺便说一句:每个工具都有它的工作 ey ;) - MyISAM 也是如此。所以回答你的问题:不,在这种情况下我实际上没有,它实际上是一个缓存表,但无论如何......问题更多的是关于后台进程和理解如果表锁定已经激活,mysql是否跳过行锁定: )
标签: mysql sql locking alter-table