ege*_*ari 2 performance spring hibernate transactions
我有一个奇怪的小问题.我有一个服务,需要在数据库中创建2000条记录,最少在各种表上.虽然让它们在同一个事务中运行会很好,但是在400-600个插件中性能会非常糟糕.
由于某种原因,插入越来越慢.我认为Hibernate需要进行某种脏检查......随着对象图变得越来越复杂,Hibernate有越来越多的工作要做.
这非常糟糕,因为我们有一个服务基本上将200兆的XML数据导入到数据库中,从而产生大约70,000个插入.这需要大约1.5小时才能运行.
所以在Spring中,有没有办法可以说,"保持hibernate会话打开,因为我们需要延迟加载和工作......但是不要在事务中放任何东西?"
您应该从Hibernate中阅读以下批处理文档.当您在单个事务中执行操作时,它们都是同一Hibernate会话的一部分.在刷新会话之前,没有任何对象持久保存到数据库中,因此它们都保留在内存中.您需要定期刷新会话并清除它.文档提供了大量详细信息.如果您确实不需要Hibernate会话的所有语义,请使用无状态会话接口.
此外,请确保使用JDBC批处理参数.如果你不使用它,那么Hibernate将一次向数据库写一行,而不是批量写入多行.您可能希望根据数据库和驱动程序尝试不同的批处理大小.
请记住,Hibernate与对象跟踪和脏检查相关的开销很大.如果调整的性能不符合您的要求,您可能需要考虑使用Hibernate映射文件生成原始SQL,但使用原始JDBC插入数据.
| 归档时间: |
|
| 查看次数: |
2459 次 |
| 最近记录: |