我试图在一张大桌子(26G)上创建一些常规索引但是需要很多时间 - 超过2小时。每个指数大约需要11分钟。
Mybe我错了,我应该集中精力改善从oracle(oracle_fdw)将数据加载到postgresql所需的时间。我从remote_oracle_table(约200G)预先形成很多插入到local_postgresql_table select *。它还需要很多时间,如果有办法改变其中一个参数以提高性能,我将很乐意听到。在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
谢谢,Mariel。
答案 0 :(得分:-1)
Visit this blog for the Example of Parallel Query Processing:
对于并行顺序扫描,在后台,多个worker或CPU线程负责执行一个查询。我们可以轻松设置Parallel Sequential参数的值,可以快10倍地执行查询。
使用max_worker_processes参数,在PostgreSQL 9.6中,您可以更改Process Workers参数值,默认为8。
答案 1 :(得分:-1)
创建X多个索引的一个问题是,如果表大小超过了缓存大小,则无法避免对表执行X物理读取。
很多年前,我通过在同一时间开始在不同会话中构建多个索引来解决这个问题。这意味着每个块的物理读取只对每个正在创建的索引进行读取。
缺点是你需要更多的排序记忆才能有效地做到这一点。
可能值得一试。