如何使用带有连接池DataSource的CopyManager?

时间:2015-04-22 08:54:16

标签: java database postgresql c3p0 visualvm

我尝试使用postgres CopyManager.copyIn()进行批量插入。我的数据源是c3p0 ComboPooledDataSource

sql语句是批处理:

dataSource.getConnection().getCopyAPI().copyIn(sql, items); //pseudocode

现在为了加快数据库插入速度(预处理后导入100 GB),我试图在异步线程中发送copyIn命令。

但是,如果数据库位于单个磁盘文件系统上,这是否有意义?这会获得性能吗?

我怎样才能真正验证copyIn是否并行使用连接池?

我尝试了VisualVM MBeans屏幕,在那里我可以看到一个PooledDataSource条目。但我怎么知道池已被使用并且项目被并行发送到DB?

1 个答案:

答案 0 :(得分:1)

  

但是,如果数据库位于单个磁盘文件系统上,这是否有意义?这会获得性能吗?

如果它旋转生锈它可能不会,并且在很多并发性方面肯定没什么好处。对于SSD,它有时会产生相当大的改进。取决于驱动器。

  

我尝试了VisualVM MBeans屏幕,在那里我可以看到一个PooledDataSource条目。但我怎么知道池已被使用并且项目被并行发送到DB?

查看数据库中的pg_stat_activity,看看该应用程序是否有多个并发COPY命令。