JDBC到极限
JDBC to the limit
我正在使用 java.sql.Connection.setAutoCommit(false)
和 java.sql.PreparedStatement.addBatch()
进行一些批量插入。我猜想在提交之前可以安全地执行多少正确的 insert/update 语句?例如,在提交之前执行 100.000 次插入可能会导致 JDBC 驱动程序投诉或内存泄漏或其他问题?我想在提交之前我可以执行多少条语句是有限制的,我在哪里可以找到这样的信息?
没有 DML
语句的数量限制。您推送到数据库的每个 INSERT/UPDATE/DELETE
实际上仅在数据库中被跟踪。因此不会像您提到的那样出现任何内存泄漏。 JDBC
中的内存泄漏通常只与未关闭的结果集或准备好的语句有关。
但另一方面,没有 COMMIT
的 DML
操作太多,可以在数据库中进行如此多的日志记录。这可能会影响其他操作的性能。当您在 INSERTs
的 百万 之后发出 COMMIT
时,其他操作如 INDEX
分析、数据复制(如果有)会带来更多开销到 DBMS
。这些要点仍然是完全 DBMS
具体的。 JDBC
驱动无关
我正在使用 java.sql.Connection.setAutoCommit(false)
和 java.sql.PreparedStatement.addBatch()
进行一些批量插入。我猜想在提交之前可以安全地执行多少正确的 insert/update 语句?例如,在提交之前执行 100.000 次插入可能会导致 JDBC 驱动程序投诉或内存泄漏或其他问题?我想在提交之前我可以执行多少条语句是有限制的,我在哪里可以找到这样的信息?
没有 DML
语句的数量限制。您推送到数据库的每个 INSERT/UPDATE/DELETE
实际上仅在数据库中被跟踪。因此不会像您提到的那样出现任何内存泄漏。 JDBC
中的内存泄漏通常只与未关闭的结果集或准备好的语句有关。
但另一方面,没有 COMMIT
的 DML
操作太多,可以在数据库中进行如此多的日志记录。这可能会影响其他操作的性能。当您在 INSERTs
的 百万 之后发出 COMMIT
时,其他操作如 INDEX
分析、数据复制(如果有)会带来更多开销到 DBMS
。这些要点仍然是完全 DBMS
具体的。 JDBC
驱动无关