要点: 使用1k批次一次插入100k行(是的,它肯定是批处理的),并且每个批次的插入时间都在增加。试图了解原因。
原始问题: JProfiler显示了在ReadAheadInputStream.fill中读取InputStream所花费的大量时间。
更新:以下来自EJP的评论“数据库服务器正在执行语句并准备响应”
什么可能导致这么多时间在这里?
详细信息:
我们有另一个应用程序(使用JDBC模板),它在同一个表上执行相同的INSERT,但随着表的增长不会减慢速度。因此,虽然数据库调优可能会提高性能,但由于另一个应用程序基本上执行相同的插入而没有性能问题,因此次优的数据库配置无法解释速度减慢。
Dev Stack:
- Java 8
- Hibernate 4.3.6
- Spring Data JPA 1.7.2
- MySQL 5.6.20
- MySQL驱动程序5.1.33
- HikariCP 2.3.2
我知道我没有提供代码示例。我基本上是在寻找想法并更好地理解可能导致在ReadAheadInputStream.fill和调用堆栈中花费如此多时间的内容。
答案 0 :(得分:0)
最后,我们无法确定根本原因并使用JPA / Hibernate修复批量插入的降级问题。因此,对于大批量插入,我们已恢复使用JDBC模板。我们不再看到任何性能下降。