来自postgresql中删除操作的事务块。日志?

时间:2016-04-27 08:51:40

标签: sql transactions postgresql-9.1 delete-row

我有查询从非常大的表中删除记录有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)

1 个答案:

答案 0 :(得分:0)

首先,PostgreSQL事务日志主要是您在恢复(电源故障或时间点恢复之后)或进行复制时的一个因素。由于PostgreSQL处理磁盘存储的方式,来自事务的大型日志段不会给您带来问题。 PostgreSQL使用堆表(不是在索引周围排序)和异步垃圾收集(autovacuum),所以日志段是一个问题的唯一点是在事务提交。

更有可能是来自同一个表上的其他写操作的行锁。发生这种情况时,PostgreSQL无法安全地知道在另一个事务完成之后该做什么,所以它会等待。