JDBC - 有多少操作可以安全地保持未提交
JDBC - how much operation is safe to keep uncommited
我在批处理作业中有大约 10-15 个(池管理的)连接。连接隔离级别为 READ_UNCOMMITTED。我的计划是在最后提交所有 JDBC 连接。每个连接将执行大约 30000-45000 条记录的批量插入。
保持未提交多少操作是安全的。它与数据库服务器中可用的主内存有关吗?还有哪些需要注意的地方。
短暂阅读后,我得出结论,大多数支持事务的数据库都会使用日志缓冲区文件或内存,以维持事务中可以存储多少事务。所有未提交的记录都将放入此缓冲区。每次事务提交(或回滚)时它们都会被刷新。
我读了一些书:
使用 READ_UNCOMMITTED
是一个非常糟糕的主意。您正在编写根据数据库中可能回滚的信息执行决策的代码。
至于提交更改之前要等待多长时间,您需要问自己一些问题:
有多少独立的 insert/update/delete 语句是相关的,即必须 全部成功 或 全部失败 ?永远不要在这样一系列语句的中间提交。
您准备在失败的情况下放弃多少未完成的 insert/update/delete 语句,例如程序崩溃或电源故障?
提交需要等待同步,所以提交太频繁会降低性能。再加上问题2,性能有多重要,即你敢等多久才以性能为名?
事务的最大大小,即未提交的 insert/update/delete 语句的数量,由数据库服务器的 配置 间接控制。未提交的语句通常存储在 log 中,并且该日志的大小受到硬盘大小的限制。
我在批处理作业中有大约 10-15 个(池管理的)连接。连接隔离级别为 READ_UNCOMMITTED。我的计划是在最后提交所有 JDBC 连接。每个连接将执行大约 30000-45000 条记录的批量插入。
保持未提交多少操作是安全的。它与数据库服务器中可用的主内存有关吗?还有哪些需要注意的地方。
短暂阅读后,我得出结论,大多数支持事务的数据库都会使用日志缓冲区文件或内存,以维持事务中可以存储多少事务。所有未提交的记录都将放入此缓冲区。每次事务提交(或回滚)时它们都会被刷新。
我读了一些书:
使用 READ_UNCOMMITTED
是一个非常糟糕的主意。您正在编写根据数据库中可能回滚的信息执行决策的代码。
至于提交更改之前要等待多长时间,您需要问自己一些问题:
有多少独立的 insert/update/delete 语句是相关的,即必须 全部成功 或 全部失败 ?永远不要在这样一系列语句的中间提交。
您准备在失败的情况下放弃多少未完成的 insert/update/delete 语句,例如程序崩溃或电源故障?
提交需要等待同步,所以提交太频繁会降低性能。再加上问题2,性能有多重要,即你敢等多久才以性能为名?
事务的最大大小,即未提交的 insert/update/delete 语句的数量,由数据库服务器的 配置 间接控制。未提交的语句通常存储在 log 中,并且该日志的大小受到硬盘大小的限制。