通过python脚本更新数据库中的行突然卡住了

问题描述 投票:0回答:1

我打算更新数据库中近 50 万行。我有一个 python 脚本,它通过将 1000 作为批处理大小来实现此目的(如果我给定的批处理大小超过 1000,则限制我声明 1000 是最大限制)。这是一个示例更新查询,我将为每 100 个帐户 ID 运行该查询

UPDATE <table_name>
        SET INDICATOR = 'N'
        WHERE ACCOUNT_ID IN ('456456456',.........,'123123123') AND CONVERSION = 'C2' AND INDICATOR = 'Y';

当我运行这个脚本时,它突然卡在

cursor.executemany(sql query)

例如,我有 100 000 条数据,我有 100 个批次,每个批次 1000 个帐户 id。当我开始执行脚本时,假设将立即执行 65 个批次,而对于 66 个批次,它将卡在上述行。 这种情况不会一直发生,也很少发生。

我得到的解决方案是,当卡在那里时,我进入数据库并执行

EXEC DBMS_STATS.GATHER_TABLE_STATS('<schema name>', '<tablename>');
这个plsql过程。 执行此命令后,所有其他批次将立即执行。

这是我的问题。 怎么突然就卡住了? 上面的命令做了什么才能恢复执行? 我需要做什么来避免代码突然停止。我不想使用上面的 plsql 过程。

您能帮我了解发生了什么以及如何纠正吗?

python-3.x database plsql cx-oracle oracle
1个回答
0
投票

您可以尝试每 10k 行左右添加一次提交吗?

© www.soinside.com 2019 - 2024. All rights reserved.