Re: Using condition variables to wait for checkpoints - Mailing list pgsql-hackers

From Andres Freund
Subject Re: Using condition variables to wait for checkpoints
Date
Msg-id 20190312231204.k5jqe7x2wetl6m6u@alap3.anarazel.de
Whole thread Raw
In response to Using condition variables to wait for checkpoints  (Thomas Munro <thomas.munro@gmail.com>)
Responses Re: Using condition variables to wait for checkpoints
List pgsql-hackers
Hi,

On 2019-03-13 11:56:19 +1300, Thomas Munro wrote:
> A user complained about CREATE DATABASE taking > 200ms even with fsync
> set to off.  Andres pointed out that that'd be the clunky poll/sleep
> loops in checkpointer.c.
> 
> Here's a draft patch to use condition variables instead.
> 
> Unpatched:
> 
> postgres=# checkpoint;
> CHECKPOINT
> Time: 101.848 ms
> 
> Patched:
> 
> postgres=# checkpoint;
> CHECKPOINT
> Time: 1.851 ms

Neat. That's with tiny shmem though, I bet?


> +        <row>
> +         <entry><literal>CheckpointDone</literal></entry>
> +         <entry>Waiting for a checkpoint to complete.</entry>
> +        </row>

> +        <row>
> +         <entry><literal>CheckpointStart</literal></entry>
> +         <entry>Waiting for a checkpoint to start.</entry>
> +        </row>

Not sure I like these much, but I can't quite ome up with something
meaningfully better.


Looks good to me. Having useful infrastructure is sure cool.


- Andres


pgsql-hackers by date:

Previous
From: Thomas Munro
Date:
Subject: Using condition variables to wait for checkpoints
Next
From: Shawn Debnath
Date:
Subject: Introduce timeout capability for ConditionVariableSleep