0

私は PostgreSQL 9.6 (Ubuntu 16.04) を使用しており、約 10k 行の小さなテーブル T があり、各行はピーク時に毎分 2 回更新されます (のようなものUPDATE T SET c1 = ?, c2 = ? WHERE id = ?)。さらに、これはこのテーブルで行われる唯一の更新操作であり、挿入と削除はほとんど行われません。

しかし、T でのクエリが少し遅いことに気付きSELECT、少し調べたところ、「PostgreSQL での更新は、実際には DELETE+INSERT のトランザクションである (MVCC による)」ことがわかりました。さらに、 this onethis oneのような同様の問題を見つけましたが、UPDATEクエリに関するものです。

私の質問は次のとおりです。連続して頻繁に更新すると、選択クエリが遅くなりますか? もしそうなら、それを処理する適切な方法は何ですか?

4

2 に答える 2

0

はい、あなたが言ったように、頻繁な更新/削除はクエリが遅い理由かもしれません。したがって、削除された行 (実際の DELETE または UPDATE からの削除) は削除としてマークされ、別の挿入に使用されるまで実際にデータ ページにとどまります。この状況を回避するには、テーブルで VACUUM などの適切なメンテナンス ルーチンを実行する必要があります。別の簡単な解決策は、

create table similar_table;

insert into similar_table;

select * from original_table;

drop original_table;

alter table rename similar_table original_table;

これは、VACUUM を使用する代わりに小さなテーブルに使用できます。

また、クエリ プランも確認する必要があります。不十分なクエリも選択を遅くする可能性があります。

于 2018-01-04T12:07:15.183 に答える