git.postgresql.org Git - postgresql.git/commitdiff

git projects / postgresql.git / commitdiff
? search:
summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 285d8e1)
Don't duplicate parallel seqscan shmem sizing logic in nbtree.
2019年1月15日 20:19:21 +0000 (12:19 -0800)
2019年1月15日 20:19:21 +0000 (12:19 -0800)
This is architecturally mildly problematic, which becomes more
pronounced with the upcoming introduction of pluggable storage.

To fix, teach heap_parallelscan_estimate() to deal with SnapshotAny
snapshots, and then use it from _bt_parallel_estimate_shared().

Author: Andres Freund
Discussion: https://postgr.es/m/20180703070645.wchpu5muyto5n647@alap3.anarazel.de


diff --git a/src/backend/access/heap/heapam.c b/src/backend/access/heap/heapam.c
index f7b08ffdd13c82d62fd4247632e69920ffe61266..9afbc8228de18d7907570040bdf90e7f4e0749f5 100644 (file)
--- a/src/backend/access/heap/heapam.c
+++ b/src/backend/access/heap/heapam.c
@@ -1615,8 +1615,14 @@ heap_endscan(HeapScanDesc scan)
Size
heap_parallelscan_estimate(Snapshot snapshot)
{
- return add_size(offsetof(ParallelHeapScanDescData, phs_snapshot_data),
- EstimateSnapshotSpace(snapshot));
+ Size sz = offsetof(ParallelHeapScanDescData, phs_snapshot_data);
+
+ if (IsMVCCSnapshot(snapshot))
+ sz = add_size(sz, EstimateSnapshotSpace(snapshot));
+ else
+ Assert(snapshot == SnapshotAny);
+
+ return sz;
}
/* ----------------
diff --git a/src/backend/access/nbtree/nbtsort.c b/src/backend/access/nbtree/nbtsort.c
index 83966dc4d414fdb257a08991f63d649c8bc16b0a..5cc3cf57e22ce6bbc7299431f9ca6f10779335c7 100644 (file)
--- a/src/backend/access/nbtree/nbtsort.c
+++ b/src/backend/access/nbtree/nbtsort.c
@@ -158,7 +158,7 @@ typedef struct BTShared
/*
* This variable-sized field must come last.
*
- * See _bt_parallel_estimate_shared().
+ * See _bt_parallel_estimate_shared() and heap_parallelscan_estimate().
*/
ParallelHeapScanDescData heapdesc;
} BTShared;
@@ -1405,15 +1405,8 @@ _bt_end_parallel(BTLeader *btleader)
static Size
_bt_parallel_estimate_shared(Snapshot snapshot)
{
- if (!IsMVCCSnapshot(snapshot))
- {
- Assert(snapshot == SnapshotAny);
- return sizeof(BTShared);
- }
-
- return add_size(offsetof(BTShared, heapdesc) +
- offsetof(ParallelHeapScanDescData, phs_snapshot_data),
- EstimateSnapshotSpace(snapshot));
+ return add_size(offsetof(BTShared, heapdesc),
+ heap_parallelscan_estimate(snapshot));
}
/*
This is the main PostgreSQL git repository.
RSS Atom

AltStyle によって変換されたページ (->オリジナル) /