首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Postgresql中并发创建GIN索引

如何在Postgresql中并发创建GIN索引
EN

Database Administration用户
提问于 2018-03-06 13:42:20
回答 1查看 942关注 0票数 2

我有一个大表:CREATE TABLE hh(h int8[] not null, file int8 not null)h字段上的GIN索引(CREATE INDEX ON hh USING gin(h))。索引创建大约8分钟,所以我决定将这个大表分成两个或多个表,并在所有这些表上创建索引。

我假设这些索引是并行创建的,我得到了大约双倍的加速比(因为索引和表放在一个磁盘上,所以稍微少了一点)。我假设两张桌子有4-5分钟(而不是一张桌子有10分钟)。

但那没有发生!两个索引都创建了8-9分钟,而不是4-5分钟。

我尝试在其他大表上并行创建B树索引,是的,PostgreSQL可以并行创建这样的索引。所以我认为这也适用于杜松子酒。

我有足够的内存用于索引:32 for。原始表有1Gb大小,原始索引有3Gb大小。分割表的大小为0.5Gb,索引为1.3Gb。maintenance_work_mem = 16Gbwork_mem = 16Gb.

我还尝试将第二个表和索引放在另一个表空间(位于其他物理磁盘中),但是加速非常小(7.5分钟对8分钟)。为什么??

那么,如何并行地创建GIN索引呢?这个是可能的吗?

EN

回答 1

Database Administration用户

发布于 2018-03-09 22:54:45

为了跟进我的评论,PostgreSQL绝对可以在不同的表上并行地构建gin索引。如果你没有看到好处,那是因为你没有足够的资源。可能是随机磁盘IO容量,因为构建大型gin索引在这方面可能会非常密集。

如果使用不同的表空间没有加快速度,那么IO瓶颈可能在内核或FS代码中,因此无法充分利用底层硬件。更明确地确定瓶颈的一种方法是在同一台机器上运行两个单独的PostgreSQL服务器(侦听不同的端口),然后在每个数据库服务器中放置一个表,并尝试在设置的服务器上同时创建索引。

票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/199486

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档