数据库
首页 > 数据库> > Postgresql 9加速索引插入(JPA)

Postgresql 9加速索引插入(JPA)

作者:互联网

我有一个应用程序,它生成大量需要快速插入的数据(约1300万条记录).我使用JPA 2.0 / Hibernate和Postgres 9.1,我设法实现了相当不错的性能(每秒大约25k次插入),每隔几千个插件就可以进行多线程和批量插入,在大约8分钟内完成整个运行.

但是,我注意到我有一些缺少索引的外键,我真的希望从分析的角度来深入挖掘数据,并将数据删除到特定的运行.不幸的是,当我将这3个索引添加到获得大多数插入的表中时,性能急剧下降到大约每秒3k.

有没有办法避免这种性能减慢?我知道一个选项是在运行之前删除索引并最终重新创建它们.另一个更笨拙的选择是生成文件中最大表的数据而使用COPY.我想我只能在关系中最大的表上进行,因为我需要知道的外键值(通过序列生成).

两种选择似乎都是黑客.有没有其他解决方案,可能对应用程序有点干扰?一些设置告诉postgres推迟索引或类似的东西?

任何想法欢迎.

解决方法:

延迟索引会很好,但目前不支持.

添加索引具有成本 – 写入性能.他们是一种权衡.

如果索引维护是主要问题,COPY将无济于事.

最简单的解决方案是删除索引,并在完成导入后重新创建它们.

如果数据库崩溃,您可能会丢失所有数据,因此您可以通过一系列选项来进一步提高性能,包括:

>未记录的表格
> fsync = off
>承载数据库的驱动器上的非持久磁盘写入缓存

如果出现任何问题,使用上述任何内容都会占用您的数据.最后一个选项也可能会占用文件系统.

我在https://stackoverflow.com/questions/9407442/optimise-postgresql-for-fast-testing写了更多关于这个的内容.

标签:performance-tuning,java,postgresql,postgresql-9-1,index
来源: https://codeday.me/bug/20190805/1591523.html