diff --git a/pgxn/neon/libpagestore.c b/pgxn/neon/libpagestore.c index d0572e66cb..04d072037d 100644 --- a/pgxn/neon/libpagestore.c +++ b/pgxn/neon/libpagestore.c @@ -435,6 +435,14 @@ pg_init_libpagestore(void) GUC_UNIT_MB, NULL, NULL, NULL); + DefineCustomBoolVariable("neon.prefetch", + "Enable Neon prefetch mechanism", + NULL, + &prefetch_enabled, + false, + PGC_SIGHUP, + NULL, NULL, NULL); + relsize_hash_init(); if (page_server != NULL) diff --git a/pgxn/neon/pagestore_client.h b/pgxn/neon/pagestore_client.h index 5b21abc1bd..749b1289a1 100644 --- a/pgxn/neon/pagestore_client.h +++ b/pgxn/neon/pagestore_client.h @@ -154,6 +154,7 @@ extern char *zenith_timeline; extern char *zenith_tenant; extern bool wal_redo; extern int32 max_cluster_size; +extern bool prefetch_enabled; extern const f_smgr *smgr_zenith(BackendId backend, RelFileNode rnode); extern void smgr_init_zenith(void); diff --git a/pgxn/neon/pagestore_smgr.c b/pgxn/neon/pagestore_smgr.c index ebf899dfdb..8c643ac826 100644 --- a/pgxn/neon/pagestore_smgr.c +++ b/pgxn/neon/pagestore_smgr.c @@ -98,6 +98,7 @@ char *page_server_connstring; // with substituted password char *zenith_timeline; char *zenith_tenant; bool wal_redo = false; +bool prefetch_enabled; int32 max_cluster_size; /* unlogged relation build states */ @@ -1026,7 +1027,7 @@ zenith_prefetch(SMgrRelation reln, ForkNumber forknum, BlockNumber blocknum) elog(ERROR, "unknown relpersistence '%c'", reln->smgr_relpersistence); } - if (n_prefetch_requests < MAX_PREFETCH_REQUESTS) + if (prefetch_enabled && n_prefetch_requests < MAX_PREFETCH_REQUESTS) { prefetch_requests[n_prefetch_requests].rnode = reln->smgr_rnode.node; prefetch_requests[n_prefetch_requests].forkNum = forknum;