微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在没有表锁定的情况下在巨大的MariaDB生产数据库中创建索引

如何解决在没有表锁定的情况下在巨大的MariaDB生产数据库中创建索引

我有一张具有202M条记录的表,我需要在其中添加一些索引,并且如果可以在不锁定的情况下在MariaDB 10.3中做到这一点(或者我不懂行话),

我发现this postMysqL 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 举报,一经查实,本站将立刻删除。