gpt4 book ai didi

java - Oracle和JDBC计算事务期间发生的执行次数及其性能

转载 作者:行者123 更新时间:2023-12-01 14:53:08 25 4
gpt4 key购买 nike

我有以下代码:

void updateRecords(long[] ids, Timestamp[] dates, Connection connection
{
PreparedStatement statement = connection.prepareStatement(
"Update Foo set date = ? where id = ?");
for(int i =0; i < ids.length;i++)
{
statement.setTimestamp(1,dates[i]);
statement.setLong(2,ids[i]);
statement.addBatch();
if(i %25000 == 0)
{
statement.executeBatch();
statement.clearBatch();
}
}
statement.executeBatch();
}

这个性能很糟糕,100 万次更新需要 2 个小时以上。所以在我的多部分问题中:

1) Oracle 上执行了多少条语句?
2) 如何提高 Oracle 上执行的语句数量,以减少执行 100 万次更新所需的时间?

这是 Oracle 10g 和 Java 6。

我想这会执行 N 个语句,其中 N 是 ids

最佳答案

1) 是的,有多少个 id,oracle 就会执行多少条语句。

2)对于这样的事情,最好的选择是在一次调用中将日期发送到数据库,然后使用存储过程进行更新。例如,您可以将 ids 和时间戳作为数组发送,然后在存储过程中重新创建逻辑。此外,根据您的数据库结构和配置,在存储过程中经常运行提交可以提高性能(假设您的操作不必是原子的)。

你可以看一个例子here 。只需更改类型以满足您的要求,而不是执行插入,而是在存储过程中执行更新:

forall i in 1.. example.count 
update Foo set date = treat(example(i) as T_TYPE).DATE where id = treat(example(i) as T_TYPE).ID;
end;

关于java - Oracle和JDBC计算事务期间发生的执行次数及其性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14628148/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com