我们有一个postgres过程,其工作方式如下: -
1)将CSV文件拆分为每个记录有一行的表
2)pagent运行一个postgres函数,该函数读取每条记录并将其作为新记录或更新写入新表
3)触发器在新表上运行,并根据记录值运行plv8函数来更新其数据(涉及json处理的相当一部分,并且plv8是编码它的最简单方法)。第二次更新来自plv8,我们使用了以下模式: -
query = plv8.prepare('...');
query.execute(<params>);
query.free();
当我们监控这个时,我们看到处理5000条记录使用14Gb的虚拟内存。因此,CSV记录是&lt; 1k大小。在我们向表中添加新索引后,这变得非常严重。
我们应该在哪里寻找解决方案?它是否正常,是否与事务中更新的索引或其他因素相关联。