私は30万のレコードを持つ非常に大きなテーブルからレコードを削除するクエリを持っています。私はこの小さなクエリを5回実行したときに10kレコードのような小さな塊でレコードを削除しています。postgresqlの削除操作のトランザクションブロック。ログ?
しかしそれ以降は出てこない。今でも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)
ほとんどの場合、クエリはロックを待機しています。こちらをご覧ください:https://wiki.postgresql.org/wiki/Lock_Monitoring WALセグメントのサイズ(Postgresに「トランザクションログ」というものはありません)が大きすぎる場合は、エラーメッセージ –
はいなぜなら、単純な削除操作でロックが取得されているのはなぜですか? – SUDARSHAN
あなたのdeleteステートメントはロックされません。おそらく、それらの行を変更する他のトランザクションがあります。または、参照先テーブルが変更されている外部キー。 wikiページを読んで文を実行して、これらのロックの原因を調査してください。それ以上の情報なしで言うことは不可能です。 –