diff options
author | Amit Kapila <akapila@postgresql.org> | 2021-09-02 08:13:46 +0530 |
---|---|---|
committer | Amit Kapila <akapila@postgresql.org> | 2021-09-02 08:13:46 +0530 |
commit | 31c389d8de915b705ee06c7a6e9246e20f36b9dc (patch) | |
tree | d90d353d2b81389163684cacadc780bf90dbeeec /src/include | |
parent | 163074ea84efec6ffa4813db43cc956ac5d12565 (diff) | |
download | postgresql-31c389d8de915b705ee06c7a6e9246e20f36b9dc.tar.gz postgresql-31c389d8de915b705ee06c7a6e9246e20f36b9dc.zip |
Optimize fileset usage in apply worker.
Use one fileset for the entire worker lifetime instead of using
separate filesets for each streaming transaction. Now, the
changes/subxacts files for every streaming transaction will be
created under the same fileset and the files will be deleted
after the transaction is completed.
This patch extends the BufFileOpenFileSet and BufFileDeleteFileSet
APIs to allow users to specify whether to give an error on missing
files.
Author: Dilip Kumar, based on suggestion by Thomas Munro
Reviewed-by: Hou Zhijie, Masahiko Sawada, Amit Kapila
Discussion: https://postgr.es/m/E1mCC6U-0004Ik-Fs@gemulon.postgresql.org
Diffstat (limited to 'src/include')
-rw-r--r-- | src/include/replication/worker_internal.h | 10 | ||||
-rw-r--r-- | src/include/storage/buffile.h | 5 |
2 files changed, 12 insertions, 3 deletions
diff --git a/src/include/replication/worker_internal.h b/src/include/replication/worker_internal.h index a6c9d4e2a10..c00be2a2b6f 100644 --- a/src/include/replication/worker_internal.h +++ b/src/include/replication/worker_internal.h @@ -50,6 +50,15 @@ typedef struct LogicalRepWorker XLogRecPtr relstate_lsn; slock_t relmutex; + /* + * Used to create the changes and subxact files for the streaming + * transactions. Upon the arrival of the first streaming transaction, the + * fileset will be initialized, and it will be deleted when the worker + * exits. Under this, separate buffiles would be created for each + * transaction which will be deleted after the transaction is finished. + */ + FileSet *stream_fileset; + /* Stats. */ XLogRecPtr last_lsn; TimestampTz last_send_time; @@ -79,7 +88,6 @@ extern void logicalrep_worker_launch(Oid dbid, Oid subid, const char *subname, extern void logicalrep_worker_stop(Oid subid, Oid relid); extern void logicalrep_worker_wakeup(Oid subid, Oid relid); extern void logicalrep_worker_wakeup_ptr(LogicalRepWorker *worker); -extern void logicalrep_worker_cleanupfileset(void); extern int logicalrep_sync_worker_count(Oid subid); diff --git a/src/include/storage/buffile.h b/src/include/storage/buffile.h index 143eada85fe..7ae5ea2dde0 100644 --- a/src/include/storage/buffile.h +++ b/src/include/storage/buffile.h @@ -49,8 +49,9 @@ extern long BufFileAppend(BufFile *target, BufFile *source); extern BufFile *BufFileCreateFileSet(FileSet *fileset, const char *name); extern void BufFileExportFileSet(BufFile *file); extern BufFile *BufFileOpenFileSet(FileSet *fileset, const char *name, - int mode); -extern void BufFileDeleteFileSet(FileSet *fileset, const char *name); + int mode, bool missing_ok); +extern void BufFileDeleteFileSet(FileSet *fileset, const char *name, + bool missing_ok); extern void BufFileTruncateFileSet(BufFile *file, int fileno, off_t offset); #endif /* BUFFILE_H */ |