我使用java.sql.Connection.setAutoCommit(false)
和java.sql.PreparedStatement.addBatch()
来做一些批量插入。我猜在提交之前可以安全地执行多少个正确的插入/更新语句?例如,在提交之前执行100.000插入可能会导致JDBC驱动程序投诉或内存泄漏或其他问题?我想在提交之前可以执行多少条语句是有限制的,我可以在哪里找到这样的信息?JDBC到极限
JDBC到极限
回答
还有没有限制在DML
声明的数量。您推送到数据库的每个INSERT/UPDATE/DELETE
实际上仅在数据库中进行跟踪。所以不会像你提到的那样有任何内存泄漏。 JDBC
中的内存泄漏通常只与未关闭的结果集或预准备语句相关。
但是另一方面,如此多的DML
操作没有COMMIT
,可以做很多日志记录在数据库中。这可能会影响其他业务的表现。当你在百万INSERTs
之后发出COMMIT
时,其他操作如INDEX
分析,数据复制(如果有的话)会给DBMS
增加更多开销。仍然这些点完全是DBMS
具体。 JDBC
驱动程序与此无关。
这是不正确的。当使用批处理语句** all **时,通过'addBatch()'添加的语句(实际上是语句的_values_)被驱动程序保存在内存中,直到调用executeBatch()为止。 – 2015-02-11 09:58:46
在DB2中,我得到* java.sql.SQLException:超出语句数限制。* – agad 2015-02-11 10:02:33
@a_horse_with_no_name是的,我同意他们在驱动程序中。但它们只是语句(文本),不应该为'JVM'创建一个开销?!并且,如果任何限制都只是一个'DBMS'参数(由DBA定制?)。 – 2015-02-11 10:06:43
- 1. CLGeocoder geocodeAddressString()达到极限
- 2. 极限点到一层
- 3. 极限运动
- 4. 的SQLAlchemy:joinedload +极限
- 5. 集成极限
- 6. 极限行输出
- 7. PHP:JSON解码极限
- 8. 极限长度PdfPCellEvent
- 9. SQL动态极限
- 10. 极限红宝石
- 11. 达到极限后恢复[vf]?nprintf
- 12. FPGA达到了USB的极限WireIns
- 13. PostgreSQL横向连接到极限组
- 14. JDBC ResultSet.absolute()与限制
- 15. 年由负-509改变到JDBC积极的510 H2数据库
- 16. javascript代码限制用户点击/提交时达到极限
- 17. PHP nl2br极限X1量
- 18. 极限动态表单域
- 19. 极限次数由工艺
- 20. 流星收集极限
- 21. 使用$变量极限
- 22. SQLite的:在左极限JOIN
- 23. 我的SQL UNION +极限
- 24. Bootstrap轮播 - ng-repeat极限
- 25. Python - 超越RAM极限?
- 26. 极限行数peewee检索
- 27. 加速度运动极限
- 28. Laravel极限关系数据
- 29. 极限为配合gnuplot的
- 30. MySQL的:变量极限
你不能以此为基准吗?它将取决于a)您的数据b)数据库等等。 – davek 2015-02-11 09:53:11
这取决于每个语句的大小。如果你只有5个整数列,那么你可能不会遇到问题。如果你有100个'varchar(1000)'列,那么情况就会有所不同。它也取决于正在使用的DBMS。如果你只提交一次**,有些速度会更快;如果你频繁提交,其他速度会更快。 – 2015-02-11 09:59:39