有没有办法在大表上缓慢创建索引

问题描述 投票:0回答:1

我正在使用由 AWS Aurora Serverless v2 托管的 PostgresSQL 15。我有一个包含 2 亿行的表,我需要在该表上创建一个索引。问题是创建索引需要几个小时,这会影响生产环境中该表的常规操作。我不想为此更改数据库实例容量。

我正在寻找一种缓慢创建索引的方法。我不介意需要几天或几周的时间。就像我制作一个在后台运行的脚本,将数据慢慢地逐块放入新索引中。可以做到吗?

postgresql amazon-web-services amazon-aurora
1个回答
0
投票

您可以

create index concurrently
并且可以减少执行此操作的会话的
max_parallel_workers
,使其不超过一个 CPU。两者都会使整个过程变慢,但除此之外您无能为力。

如果您分享了 DDL 并详细说明了“影响”的含义以及您能承受多少影响,那么想出一些东西会更容易。例如,如果这是一个分区表,则在其上创建索引会在所有分区上触发相同的操作 - 在这种情况下,您可以“手动”一一创建单独的分区索引。 create index文档中提到了

ONLY

指示如果表已分区,则不要在分区上递归创建索引。默认是递归。

当前不支持分区表上索引的并发构建。但是,您可以同时在每个分区上单独构建索引,然后最终非并发地创建分区索引,以减少对分区表的写入被锁定的时间。在这种情况下,构建分区索引只是元数据操作。

© www.soinside.com 2019 - 2024. All rights reserved.