我尝试使用postgres
CopyManager.copyIn()
进行批量插入。我的数据源是c3p0 ComboPooledDataSource
。
sql语句是批处理:
dataSource.getConnection().getCopyAPI().copyIn(sql, items); //pseudocode
现在为了加快数据库插入速度(预处理后导入100 GB),我试图在异步线程中发送copyIn
命令。
但是,如果数据库位于单个磁盘文件系统上,这是否有意义?这会获得性能吗?
我怎样才能真正验证copyIn是否并行使用连接池?
我尝试了VisualVM
MBeans
屏幕,在那里我可以看到一个PooledDataSource
条目。但我怎么知道池已被使用并且项目被并行发送到DB?
答案 0 :(得分:1)
但是,如果数据库位于单个磁盘文件系统上,这是否有意义?这会获得性能吗?
如果它旋转生锈它可能不会,并且在很多并发性方面肯定没什么好处。对于SSD,它有时会产生相当大的改进。取决于驱动器。
我尝试了VisualVM MBeans屏幕,在那里我可以看到一个PooledDataSource条目。但我怎么知道池已被使用并且项目被并行发送到DB?
查看数据库中的pg_stat_activity
,看看该应用程序是否有多个并发COPY
命令。