我的应用程序中有一个 oracle 准备好的语句,它将一次性更新表中大约 100,000 条记录的状态。例如:
UPDATE <TABLE NAME> SET STATUS=SUCCESS' where STATUS='INIT'
上述查询将一次更新大约 100,000 多条记录。有什么方法可以提高性能,例如在准备好的语句上设置批处理/获取大小?如果我使用带有上述查询的准备好的语句,我将只执行一次,因为我没有设置任何批量执行的参数,我该怎么做?
我的应用程序中有一个 oracle 准备好的语句,它将一次性更新表中大约 100,000 条记录的状态。例如:
UPDATE <TABLE NAME> SET STATUS=SUCCESS' where STATUS='INIT'
上述查询将一次更新大约 100,000 多条记录。有什么方法可以提高性能,例如在准备好的语句上设置批处理/获取大小?如果我使用带有上述查询的准备好的语句,我将只执行一次,因为我没有设置任何批量执行的参数,我该怎么做?
一种优化方法是不要一次运行一个查询(因为每个查询的系统延迟太慢......)
您可以使用批量更新。
如果您使用的是 Spring,请使用 batchUpdate
或者如果您直接处理 JDBC,则使用
preparedStatement.addBatch();
preparedStatement.executeBatch();
将更新分成多个部分可能有助于将更新分成多个事务,但我将从您的数据库设置开始。如果更新需要很长时间,您可能没有将日志大小设置得足够高。也可能存在磁盘瓶颈。