PostgreSQL批量多值INSERT为何比COPY占用内存更高?求内存预估方法
批量INSERT与COPY加载的内存差异问题
测试背景与环境
- 基于PostgreSQL批量加载测试场景,使用的表结构:
CREATE TABLE t_sample ( a varchar(50), b int, c varchar(50), d int );
- 测试数据规模:2097152条记录
- 采用两种加载方式:
- 单条多值INSERT:将所有记录整合为一条多值INSERT语句,保存为
multipleinsert.sql,通过命令psql -d load_test -f multipleinsert.sql执行 - COPY命令:按照标准批量加载方法导入相同数量的记录
- 单条多值INSERT:将所有记录整合为一条多值INSERT语句,保存为
测试现象
COPY执行过程几乎不占用额外内存;而单条多值INSERT执行时,服务器可用内存减少了约6.5GB,但对应的SQL文件大小仅为49MB。
核心疑问
- 为何单条多值INSERT的内存占用会达到约6.5GB?
- 针对此类批量加载场景,是否有可行的内存预估方法?
注:相关参考资料仅解释了COPY加载速度更快的原因,未涉及两者内存消耗差异的内容。
内容的提问来源于stack exchange,提问作者Umut TEKİN
相关产品推荐
相关产品推荐

