gpt4 book ai didi

postgresql - Postgres 的 CREATE UNIQUE INDEX 似乎卡住了一段时间

转载 作者:行者123 更新时间:2023-12-02 03:05:11 24 4
gpt4 key购买 nike

我在 Postgres 中创建了一个索引,如下所示:

CREATE UNIQUE INDEX my_index_name 
ON my_table USING btree (custid,
date_trunc('day'::text, timezone('UTC'::text, somedate)),
firstname,
middlename,
lastname);

我监视了可用磁盘空间,以估计索引创建的进度,我希望看到可用空间下降,表明该进程正在执行其工作。问题是,宕机40分钟后,卡住了25分钟,然后又开始消耗磁盘空间:

enter image description here

当它似乎卡住时,我检查了长时间运行的进程,看看是否有什么东西阻塞了它(不太可能,这是一个没有其他人使用的数据库副本),我看到有 3 个不同的相同的“CREATE INDEX”进程。

这就是我想问的:

  • 为什么 Postgres 显示 3 个不同的进程?
  • 在这段时间它似乎陷入困境,它在做什么?

这是我发出的命令来查看长时间运行的进程,在进程解除卡顿后,只有进程 18511 继续运行:

my_user => SELECT pid, now() - pg_stat_activity.query_start AS duration, query, state
FROM pg_stat_activity
WHERE (now() - query_start) > interval '5 minutes' AND state != 'idle'
ORDER by 2 DESC;

-[ RECORD 1 ]-------------------------------------------------------------------------------------------------------------------------------------------------------------
pid | 18511
duration | 01:04:37.969599
query | CREATE UNIQUE INDEX my_index_name ON my_table USING btree (custid, date_trunc('day'::text, timezone('UTC'::text, somedate)), firstname, middlename, lastname);
state | active
-[ RECORD 2 ]-------------------------------------------------------------------------------------------------------------------------------------------------------------
pid | 12712
duration | 01:04:37.969599
query | CREATE UNIQUE INDEX my_index_name ON my_table USING btree (custid, date_trunc('day'::text, timezone('UTC'::text, somedate)), firstname, middlename, lastname);
state | active
-[ RECORD 3 ]-------------------------------------------------------------------------------------------------------------------------------------------------------------
pid | 12713
duration | 01:04:37.969599
query | CREATE UNIQUE INDEX my_index_name ON my_table USING btree (custid, date_trunc('day'::text, timezone('UTC'::text, somedate)), firstname, middlename, lastname);
state | active

一些其他信息

  • 我在 Amazon 的 RDS 中运行 Postgres 11.5
  • 此表的大小为 255 GiB
  • 在该图中,Y 轴以 MiB 为单位,因此顶部有 800GiB

最佳答案

如果您看到更多进程创建索引,则说明您使用的是 PostgreSQL v11 或更高版本,并且有并行工作进程正在构建索引。这没什么好担心的;它会消耗更多资源,但构建索引速度更快。

建立索引有几个步骤:扫描表、对条目进行排序等。并非所有这些步骤都会消耗磁盘空间。例如,排序不应消耗越来越多的存储空间。

简而言之,一切看起来都理所应当。

关于postgresql - Postgres 的 CREATE UNIQUE INDEX 似乎卡住了一段时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59205974/

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