Skip to content
Snippets Groups Projects
Select Git revision
  • benchmark-tools
  • postgres-lambda
  • master default
  • REL9_4_25
  • REL9_5_20
  • REL9_6_16
  • REL_10_11
  • REL_11_6
  • REL_12_1
  • REL_12_0
  • REL_12_RC1
  • REL_12_BETA4
  • REL9_4_24
  • REL9_5_19
  • REL9_6_15
  • REL_10_10
  • REL_11_5
  • REL_12_BETA3
  • REL9_4_23
  • REL9_5_18
  • REL9_6_14
  • REL_10_9
  • REL_11_4
23 results

probes.d

Blame
    • Heikki Linnakangas's avatar
      9b38d46d
      Make group commit more effective. · 9b38d46d
      Heikki Linnakangas authored
      When a backend needs to flush the WAL, and someone else is already flushing
      the WAL, wait until it releases the WALInsertLock and check if we still need
      to do the flush or if the other backend already did the work for us, before
      acquiring WALInsertLock. This helps group commit, because when the WAL flush
      finishes, all the backends that were waiting for it can be woken up in one
      go, and the can all concurrently observe that they're done, rather than
      waking them up one by one in a cascading fashion.
      
      This is based on a new LWLock function, LWLockWaitUntilFree(), which has
      peculiar semantics. If the lock is immediately free, it grabs the lock and
      returns true. If it's not free, it waits until it is released, but then
      returns false without grabbing the lock. This is used in XLogFlush(), so
      that when the lock is acquired, the backend flushes the WAL, but if it's
      not, the backend first checks the current flush location before retrying.
      
      Original patch and benchmarking by Peter Geoghegan and Simon Riggs, although
      this patch as committed ended up being very different from that.
      9b38d46d
      History
      Make group commit more effective.
      Heikki Linnakangas authored
      When a backend needs to flush the WAL, and someone else is already flushing
      the WAL, wait until it releases the WALInsertLock and check if we still need
      to do the flush or if the other backend already did the work for us, before
      acquiring WALInsertLock. This helps group commit, because when the WAL flush
      finishes, all the backends that were waiting for it can be woken up in one
      go, and the can all concurrently observe that they're done, rather than
      waking them up one by one in a cascading fashion.
      
      This is based on a new LWLock function, LWLockWaitUntilFree(), which has
      peculiar semantics. If the lock is immediately free, it grabs the lock and
      returns true. If it's not free, it waits until it is released, but then
      returns false without grabbing the lock. This is used in XLogFlush(), so
      that when the lock is acquired, the backend flushes the WAL, but if it's
      not, the backend first checks the current flush location before retrying.
      
      Original patch and benchmarking by Peter Geoghegan and Simon Riggs, although
      this patch as committed ended up being very different from that.