gpt4 book ai didi

mariadb - 为什么我的 MariaDb 不使用 INSTANT 算法向大表添加列

转载 作者:行者123 更新时间:2023-12-03 08:11:32 27 4
gpt4 key购买 nike

我在 MariaDb (10.4.10-MariaDB-1:10.4.10+maria~bionic) 中有一个巨大的表,我正在使用添加一个新列

alter table Appointment add column responsible_organization varchar(256);

现有的表是这样的:

CREATE TABLE `Appointment` (
`id` VARCHAR(256) NOT NULL,
`version` VARCHAR(24) NOT NULL,
`repetition_ref` VARCHAR(256) NULL DEFAULT NULL,
`type` VARCHAR(256) NULL DEFAULT NULL,
`comment` VARCHAR(2048) NULL DEFAULT NULL,
`description` VARCHAR(2048) NULL DEFAULT NULL,
`end` DATETIME NULL DEFAULT NULL,
`start` DATETIME NULL DEFAULT NULL,
`status` VARCHAR(256) NULL DEFAULT NULL,
`statuschangedate` DATETIME NULL DEFAULT NULL,
`deliverystatus` VARCHAR(256) NULL DEFAULT NULL,
`reasoncancelled` VARCHAR(256) NULL DEFAULT NULL,
`visit_type` VARCHAR(256) NULL DEFAULT NULL,
`modified_db_time` TIMESTAMP(3) NOT NULL DEFAULT current_timestamp(3) ON UPDATE current_timestamp(3),
`markedasdeleted` DATETIME NULL DEFAULT NULL,
PRIMARY KEY (`id`, `version`),
INDEX `FKc4f6e4y3ftaya162pwf7v4uj4` (`deliverystatus`),
INDEX `FKeuhxsh83rlweegn404penommb` (`reasoncancelled`),
INDEX `FK5xmurewn61wf4n3of5yx2nsmg` (`visit_type`),
INDEX `modified_db_time` (`modified_db_time`),
CONSTRAINT `FK5xmurewn61wf4n3of5yx2nsmg` FOREIGN KEY (`visittype`) REFERENCES `Coding` (`id`),
CONSTRAINT `FKc4f6e4y3ftaya162pwf7v4uj4` FOREIGN KEY (`deliverystatus`) REFERENCES `CodeableConcept` (`id`),
CONSTRAINT `FKeuhxsh83rlweegn404penommb` FOREIGN KEY (`reasoncancelled`) REFERENCES `CodingDt` (`id`)
)
;

据我阅读 MariaDb 文档,如果我没有指定任何算法,它应该选择最有效的算法。我希望它至少使用 INPLACE。但是当我运行它时,我可以在进程列表中看到它正在以“复制到临时表”状态运行。这就是 COPY 算法吗?

然后我尝试强制它按照 @o-jones 的建议使用 INSTANT。这给了我这个输出:

MariaDB [mydb]> alter table Appointment add column responsibleorganisation varchar(256), ALGORITHM=INSTANT;
ERROR 1846 (0A000): ALGORITHM=INSTANT is not supported. Reason: Cannot change column type. Try ALGORITHM=COPY

奇怪,因为我要添加一列。

我想知道这是否与在旧版本的 MariaDb 上创建的表并且最近没有重建有关。我找到了references to this being an issue对于具有旧式时间列的表。

变量old_alter_tablealter_algorithm都具有值DEFAULT

我的表有 1.1 亿多行,所以我希望找到一种方法来优化它。

有什么想法吗?

最佳答案

MariaDB Server 10.4.10 于 2 年前(即 2019 年 11 月)发布。最新版本是否可以重复?从那时起,对 ALTER TABLE 进行了一些修复。

如果问题在 10.4 系列的最新版本中重复出现,我建议您在 https://jira.mariadb.org 提交错误报告。使用最小的可重现测试用例(CREATE TABLEALTER TABLE 语句)。

使用更新的版本,答案可能是 MDEV-20590引入了一种禁用涉及更改数据文件格式的即时操作的方法。 SET GLOBAL innodb_instant_alter_column_allowed=never; 将使 ADD COLUMN 始终重建表,就像 MariaDB Server 10.3 之前所做的那样。

关于mariadb - 为什么我的 MariaDb 不使用 INSTANT 算法向大表添加列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70680625/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com