我打算更新数据库中近 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 过程。
您能帮我了解发生了什么以及如何纠正吗?
您可以尝试每 10k 行左右添加一次提交吗?