PostgreSQL中的fsync和synchronous_commit
-
- fsync
postgresql.conf(またはpostgresのコマンドラインオプション)で設定
offにするとDBクラッシュ時に回復不可能なデータ破壊になるリスクがある。ユニットテスト用のDBなど、壊れてもいいから高速化したい場合に利用すると良い。
synchronous_commit
セッションごと、トランザクションごとに設定可能
offにすると、fsyncは行うがその完了を待たずにクライアントに成功を返す。DBクラッシュ時にデータが壊れることはないが、コミットしたはずの変更が失われるリスクがある。本番でoffにすることも十分見合うトレードオフ。
有効な値は何種類かある: remote_apply、on(デフォルト)、remote_write、local、off
将synchronous_commit设置为“off”,尝试了一下简单的插入语句,可以缩短约0.8毫秒。
postgres=# insert into users (name, start_date, end_date) values ('hoge', '2023-10-01', '2023-10-02');
INSERT 0 1
時間: 1.351 ミリ秒
postgres=# set synchronous_commit = 'off';
SET
時間: 0.700 ミリ秒
postgres=# insert into users (name, start_date, end_date) values ('hoge', '2023-10-01', '2023-10-02');
時間: 0.526 ミリ秒
公式文件的描述有点难懂,但根据思考一下关于提交(COMMIT)的部分,内部操作似乎与(3)中所述相似。