Hibernate批处理大小混淆
Hibernate批处理大小混淆
这个程序连续进行了数以万计的插入操作。我以前从未使用过Hibernate。我得到的性能非常慢(如果我只是手动连接并执行SQL,速度快10-12倍)。根据很多Hibernate教程,我的batch_size设置为50。
下面是一个单个插入的日志 - 或许你可以帮我理解正在发生的情况:
开始插入 11:02:56.121 [main] DEBUG org.hibernate.impl.SessionImpl - 在时间戳13106053761打开会话 11:02:56.121 [main] DEBUG o.h.transaction.JDBCTransaction - 开始事务 11:02:56.121 [main] DEBUG org.hibernate.jdbc.ConnectionManager - 打开JDBC连接 11:02:56.121 [main] TRACE o.h.c.DriverManagerConnectionProvider - 已检出的连接总数:0 11:02:56.121 [main] TRACE o.h.c.DriverManagerConnectionProvider - 使用连接池的JDBC连接,池大小:0 11:02:56.121 [main] DEBUG o.h.transaction.JDBCTransaction - 当前自动提交状态:false 11:02:56.121 [main] TRACE org.hibernate.jdbc.JDBCContext - 事务开始后 11:02:56.121 [main] TRACE org.hibernate.impl.SessionImpl - 将刷新模式设置为:手动 11:02:56.121 [main] TRACE o.h.e.def.DefaultLoadEventListener - 加载实体:[com.xyzcompany.foo.edoi.ejb.msw000.MSW000Rec#component[keyW000]{keyW000=F000 ADSUFC}] 11:02:56.121 [main] TRACE o.h.e.def.DefaultLoadEventListener - 为实体创建新代理 11:02:56.122 [main] TRACE o.h.e.d.DefaultSaveOrUpdateEventListener - 保存瞬态实例 11:02:56.122 [main] DEBUG o.h.e.def.AbstractSaveEventListener - 生成的标识符:component[keyW000]{keyW000=F000 ADSUFC},使用策略:org.hibernate.id.CompositeNestedGeneratedValueGenerator 11:02:56.122 [main] TRACE o.h.e.def.AbstractSaveEventListener - 保存[com.xyzcompany.foo.edoi.ejb.msw000.MSW000Rec#component[keyW000]{keyW000=F000 ADSUFC}] 11:02:56.123 [main] TRACE o.h.e.d.AbstractFlushingEventListener - 刷新会话 11:02:56.123 [main] DEBUG o.h.e.d.AbstractFlushingEventListener - 处理刷新时级联操作 11:02:56.123 [main] DEBUG o.h.e.d.AbstractFlushingEventListener - 检查脏集合 11:02:56.123 [main] TRACE o.h.e.d.AbstractFlushingEventListener - 刷新实体并处理引用的集合 11:02:56.125 [main] TRACE o.h.e.d.AbstractFlushingEventListener - 处理未引用的集合 11:02:56.125 [main] TRACE o.h.e.d.AbstractFlushingEventListener - 调度集合的删除/(重新)创建/更新 11:02:56.126 [main] DEBUG o.h.e.d.AbstractFlushingEventListener - 刷新:插入1条记录,更新0条记录,删除62个对象的记录 11:02:56.126 [main] DEBUG o.h.e.d.AbstractFlushingEventListener - 刷新:(重新)创建0个记录,更新0条记录,删除0个集合的记录 11:02:56.132 [main] TRACE o.h.e.d.AbstractFlushingEventListener - 执行刷新 11:02:56.132 [main] TRACE org.hibernate.jdbc.ConnectionManager - 注册刷新开始 11:02:56.132 [main] TRACE o.h.p.entity.AbstractEntityPersister - 插入实体:[com.xyzcompany.foo.edoi.ejb.msw000.MSW000Rec#component[keyW000]{keyW000=F000 ADSUFC}] 11:02:56.132 [main] DEBUG org.hibernate.jdbc.AbstractBatcher - 准备打开PreparedStatement(已打开的PreparedStatement数:0,全局:0) 11:02:56.132 [main] DEBUG org.hibernate.SQL - 插入到MSW000(W000_DATA_REC,W000_FILE_FLAGS,KEY_W000)值(?,?,?) 11:02:56.132 [main] TRACE org.hibernate.jdbc.AbstractBatcher - 准备语句 11:02:56.132 [main] TRACE o.h.p.entity.AbstractEntityPersister - 反序列化实体:[com.xyzcompany.foo.edoi.ejb.msw000.MSW000Rec#component[keyW000]{keyW000=F000 ADSUFC}] 11:02:56.132 [main] TRACE org.hibernate.type.StringType - 将' ADSUFCA'绑定到参数:1 11:02:56.132 [main] TRACE org.hibernate.type.StringType - 将' '绑定到参数:2 11:02:56.132 [main] TRACE org.hibernate.type.StringType - 将'F000 ADSUFC'绑定到参数:3 11:02:56.132 [main] DEBUG org.hibernate.jdbc.AbstractBatcher - 执行批处理大小:1 11:02:56.133 [main] DEBUG org.hibernate.jdbc.AbstractBatcher - 准备关闭PreparedStatement(已打开的PreparedStatement数:1,全局:1) 11:02:56.133 [main] TRACE org.hibernate.jdbc.AbstractBatcher - 关闭语句 11:02:56.133 [main] TRACE org.hibernate.jdbc.ConnectionManager - 注册刷新结束 11:02:56.133 [main] TRACE o.h.e.d.AbstractFlushingEventListener - 刷新后 11:02:56.133 [main] DEBUG o.h.transaction.JDBCTransaction - 提交 11:02:56.133 [main] TRACE org.hibernate.impl.SessionImpl - 自动刷新会话 11:02:56.133 [main] TRACE org.hibernate.jdbc.JDBCContext - 事务完成前 11:02:56.133 [main] TRACE org.hibernate.impl.SessionImpl - 事务完成前 11:02:56.133 [main] DEBUG o.h.transaction.JDBCTransaction - 提交JDBC连接 11:02:56.133 [main] TRACE org.hibernate.jdbc.JDBCContext - 事务完成后 11:02:56.133 [main] DEBUG org.hibernate.jdbc.ConnectionManager - 会话上的事务完成,连接释放模式设置为on_close;请确保关闭会话以释放JDBC资源! 11:02:56.133 [main] TRACE org.hibernate.impl.SessionImpl - 事务完成后 11:02:56.133 [main] TRACE org.hibernate.impl.SessionImpl - 关闭会话 11:02:56.133 [main] TRACE org.hibernate.jdbc.ConnectionManager - 执行清理 11:02:56.133 [main] DEBUG org.hibernate.jdbc.ConnectionManager - 释放JDBC连接(已打开的PreparedStatement数:0,全局:0)(已打开的ResultSets数:0,全局:0) 11:02:56.133 [main] TRACE o.h.c.DriverManagerConnectionProvider - 返回连接到池中,池大小:1 11:02:56.133 [main] TRACE org.hibernate.jdbc.JDBCContext - 事务完成后 11:02:56.133 [main] DEBUG org.hibernate.jdbc.ConnectionManager - 会话上的事务完成,连接释放模式设置为on_close;请确保关闭会话以释放JDBC资源! 11:02:56.134 [main] TRACE org.hibernate.impl.SessionImpl - 事务完成后 完成插入