mirror of
https://github.com/postgres/postgres.git
synced 2025-10-21 02:52:47 +03:00
Use atomic ops to hand out pages to scan in parallel scan.
With a lot of CPUs, the spinlock that protects the current scan location in a parallel scan can become a bottleneck. Use an atomic fetch-and-add instruction instead. David Rowley Discussion: https://www.postgresql.org/message-id/CAKJS1f9tgsPhqBcoPjv9_KUPZvTLCZ4jy%3DB%3DbhqgaKn7cYzm-w@mail.gmail.com
This commit is contained in:
@@ -35,9 +35,10 @@ typedef struct ParallelHeapScanDescData
|
||||
Oid phs_relid; /* OID of relation to scan */
|
||||
bool phs_syncscan; /* report location to syncscan logic? */
|
||||
BlockNumber phs_nblocks; /* # blocks in relation at start of scan */
|
||||
slock_t phs_mutex; /* mutual exclusion for block number fields */
|
||||
slock_t phs_mutex; /* mutual exclusion for setting startblock */
|
||||
BlockNumber phs_startblock; /* starting block number */
|
||||
BlockNumber phs_cblock; /* current block number */
|
||||
pg_atomic_uint64 phs_nallocated; /* number of blocks allocated to
|
||||
* workers so far. */
|
||||
char phs_snapshot_data[FLEXIBLE_ARRAY_MEMBER];
|
||||
} ParallelHeapScanDescData;
|
||||
|
||||
|
Reference in New Issue
Block a user