我有查询从非常大的表中删除记录有3000万条记录。我正在删除小块中的记录,比如一个小操作中的10k记录。当我运行此查询5次时,它工作正常。
但在那之后它不会出来。现在它也无法删除10条记录。我怀疑它可能会生成巨大的事务日志。如果是这样可以帮助我如何清除交易日志?如果我需要用删除查询更改任何内容?查找日志大小的任何查询?我正在使用postgres 9.1
WITH ids_to_delete as(
SELECT rh.dp_value_id
FROM raw_dp_links rh LEFT OUTER JOIN dp_values dp
ON rh.dp_value_id=dp.dp_value_id
where dp.dp_value_id is null
limit 10000
)
delete from raw_dp_links where dp_value_id in (select dp_value_id from ids_to_delete)
答案 0 :(得分:0)
首先,PostgreSQL事务日志主要是您在恢复(电源故障或时间点恢复之后)或进行复制时的一个因素。由于PostgreSQL处理磁盘存储的方式,来自事务的大型日志段不会给您带来问题。 PostgreSQL使用堆表(不是在索引周围排序)和异步垃圾收集(autovacuum),所以日志段是一个问题的唯一点是在事务提交。
更有可能是来自同一个表上的其他写操作的行锁。发生这种情况时,PostgreSQL无法安全地知道在另一个事务完成之后该做什么,所以它会等待。