sách gpt4 ai đã đi

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

In lại 作者:行者123 更新时间:2023-12-03 08:11:32 27 4
mua khóa gpt4 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对于具有旧式时间列的表。

biến đổiold_alter_tablealter_algorithm都具有值DEFAULT

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

Bạn có ý tưởng nào không?

1 Câu trả lời

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
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com