【发布时间】:2018-01-18 07:00:18
【问题描述】:
我正在尝试在一个大表 (26G) 上创建一些常规索引,但这需要很长时间 - 超过 2 小时。每个索引大约需要 11 分钟。
也许我错了,我应该专注于缩短从 oracle (oracle_fdw) 将数据加载到 postgres 所需的时间。我对local_postgresql_table select * from remote_oracle_table(大约200G)进行了大量插入,这也需要很多时间。
如果有办法更改其中一个参数以提高性能,我很乐意听到。在 26G 上运行此查询需要两个小时。
有没有办法改进这个操作?有没有办法通过改进硬件来改进这个操作(我没有看到服务器过载)?
我配置的参数:
min_parallel_relation_size = 200MB
max_parallel_workers_per_gather = 5
max_worker_processes = 8
effective_cache_size = 2500MB
work_mem = 16MB
maintenance_work_mem = 1500MB
shared_buffers = 1500MB
RAM : 5G
【问题讨论】:
-
CREATE INDEX CONCURRENTLY- 不是更快,但低锁定和低中断 -
也就是说它在后台创建索引?假设我使用了这个选项,如果我从我的表中选择它不会使用索引,直到它完成创建?我正在寻找一种可以加快创建速度的解决方案,因为我需要在我的选择中使用这些索引
-
在导入数据库之前在外部对数据进行预排序将使索引创建更快。如果您负担得起使用具有 C 语言环境和排序规则的数据库,则可以得到额外的加速。
-
我通过 oracle_fdw 从 oracle 数据库中获取数据。当您的意思是预排序时,我将在 oracle 端进行排序,但按什么排序? C 语言环境和排序规则是什么意思?
标签: postgresql indexing