如何解决在没有表锁定的情况下在巨大的MariaDB生产数据库中创建索引
我有一张具有202M条记录的表,我需要在其中添加一些索引,并且如果可以在不锁定的情况下在MariaDB 10.3中做到这一点(或者我不懂行话),
我发现this post在MysqL 5.6+中是可行的,但是我的Google foo没有获得关于MariaDB的任何信息。
我尝试使用pt-online-schema-change,但是因为我没有索引(甚至不是主索引),所以这不是一个选择。
解决方法
使用ALTER ONLINE TABLE可以做到这一点。
ALTER ONLINE TABLE等效于LOCK = NONE。因此,ALTER ONLINE TABLE语句可用于确保您的ALTER TABLE 操作允许所有并发DML。
进一步的阅读表明,添加主键是一项“复制”操作,因为数据库引擎需要将整个表复制到新文件中,但需要在就地操作中添加其他索引。
InnoDB支持将主键添加到ALGORITHM设置为的表中 到位。该表将被重建,这意味着所有数据 进行了实质性的重组,并重建了索引。结果是, 手术费用很高。此操作支持 非锁定策略。可以通过以下方式明确选择此策略: 将LOCK子句设置为NONE。使用此策略时,所有 允许并发DML。
InnoDB支持将ALGORITHM设置为的普通索引添加到表中 到位。该表未重建。此操作支持 非锁定策略。可以通过以下方式明确选择此策略: 将LOCK子句设置为NONE。使用此策略时,所有 允许并发DML。
MariaDB documentation中的更多信息。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。