我有一个循环作业,它从模板创建Postgres (v11)数据库,并将其加载到数据中。数据的规模是在数以百万计的行的10s或1000之间,因此,出于性能原因,在创建任何主键或索引之前,我会批量插入数据。这是我目前的行动顺序:
COPY所有数据创建主键和索引是此工作流中最慢的部分。当通过分析/真空/重新索引重新计算统计数据时,在这个工作流中是否有一点是有用的,甚至是必要的?
发布于 2019-08-12 21:12:01
作为步骤2.5,您可能应该做一个真空操作。如果您将其作为步骤5执行,或者允许autovac隐式地执行它(作为步骤5+something),那么您将无用地清除不需要它的索引。
如果其中任何一个索引是表示索引,则应将其作为步骤5进行分析,否则,将步骤2.5设为真空分析。表达式索引有它们自己收集的统计数据,但是当然,如果它们在分析时不存在,那就不起作用。
发布于 2019-08-12 20:01:16
若要加快索引创建,请增加maintenance_work_mem。
此外,还可以提高max_wal_size以减少检查点的数量。如果您根本不需要崩溃恢复(也就是说,您很乐意在崩溃的情况下重新创建数据库),您可以使用未登录的表来提高性能。
https://dba.stackexchange.com/questions/245164
复制相似问题