on a slow machine leads to: number of transactions actually processed: 103642/400000 ... tps = 187.796284 (without initial connection time) pgbench: error: Run was aborted; the above results are incomplete. ... TRAP: failed Assert("strategy_delta >= 0"), File: "bufmgr.c", Line: 2836, PID: 20941 postgres: background writer (ExceptionalCondition+0x52)[0x5581a8dd1677] postgres: background writer (BgBufferSync+0xb6)[0x5581a8c5b97a] postgres: background writer (BackgroundWriterMain+0x20b)[0x5581a8bf117a] postgres: background writer (AuxiliaryProcessMain+0x175)[0x5581a8befa29] postgres: background writer (+0x423cff)[0x5581a8bf5cff] postgres: background writer (PostmasterMain+0x1127)[0x5581a8bf916f] postgres: background writer (main+0x227)[0x5581a8b1d4d5]
To ease reproduction, adding the following delay is recommended: --- a/src/backend/storage/buffer/freelist.c +++ b/src/backend/storage/buffer/freelist.c @@ -417,2 +417,3 @@ StrategySyncStart(...) } +pg_usleep(300); SpinLockRelease(&StrategyControl->buffer_strategy_lock);
(Initially observed during the test 027_stream_regress (which runs with shared_buffers = '1MB') with the minimal bgwriter_delay on a slow dual-core machine, where one test run takes around 1000 sec.)
Reproduced on REL_12_STABLE .. master. In fact, the issue reproduced starting from d72731a70.