这个问题涉及到这个问题:How to speed up insertion performance in PostgreSQL
所以,我有一个java应用程序,它在PostgreSQL
数据库中执行了大量(aprox。十亿)INSERT。它会打开几个到同一个DB的JDBC连接,以便并行执行这些插入。正如我在上面提到的问题所解释的那样:
从多个连接并行插入或复制。多少取决于 在您的硬件磁盘子系统上;根据经验,你想要一个 如果使用直连存储,则每个物理硬盘连接。
但在我的情况下,我的数据库只有一个磁盘存储空间。
所以,我的问题是:在这种情况下,它真的有可能打开几个连接吗?由于I / O操作竞争,它能否降低性能而不是期望的增加?
为了澄清,这是实际postgresql
进程加载的图片:
答案 0 :(得分:-1)
由于您在Java应用程序中提到了INSERT
,我假设(使用纯JDBC)COPY
并不是您正在寻找的。如果不使用JPA等API或Spring-data等框架,我可以介绍addBatch()
和executeBatch()
,以防您没有听说过这些:
/*
the whole nine yards
*/
Connection c = ...;
PreparedStatement ps = c.prepareStatement("INSERT INTO table1(columnInt2,columnVarchar)VALUES(?,?)");
然后循环读取数据:
ps.setShort(1, someShortValue);
ps.setString(2, someStringValue);
ps.addBatch(); // one row at a time from human's perspective
准备好所有行的数据时:
ps.executeBatch();
我还建议: