]> git.ipfire.org Git - thirdparty/postgresql.git/commit
Avoid superfluous work for commits during logical slot creation.
authorAndres Freund <andres@anarazel.de>
Sat, 13 May 2017 21:47:41 +0000 (14:47 -0700)
committerAndres Freund <andres@anarazel.de>
Sat, 13 May 2017 22:06:40 +0000 (15:06 -0700)
commit2dca50b764d40c8cf4edeaaaf09a3292aeb7026e
treed4e999bd36ef5b9a462134a0b88e5b497cc3a4ca
parent79abd23db1e9c767ef2b60f6d1a50b2f9d778bf0
Avoid superfluous work for commits during logical slot creation.

Before 955a684e0401 logical decoding snapshot maintenance needed to
cope with transactions it might not have seen in their entirety. For
such transactions we'd to assume they modified the catalog (could have
happened before we were watching), and thus a new snapshot had to be
built, and distributed to concurrently running transactions.

That's problematic because building a new snapshot isn't that cheap ,
especially as the the array of committed transactions needs to be
sorted.  When creating a slot on a server with a lot of transactions,
this could make logical slot creation infeasibly expensive.

After 955a684e0401 there's no need to deal with transaction that
aren't guaranteed to be fully observable.  That allows to avoid
building snapshots for transactions that haven't modified catalog,
even before reaching consistency.

While this isn't necessarily a bugfix, slot creation being impossible
in some production workloads, is severe enough to warrant
backpatching.

Author: Andres Freund, based on a quite different patch from Petr Jelinek
Analyzed-By: Petr Jelinek
Reviewed-By: Petr Jelinek
Discussion: https://postgr.es/m/f37e975c-908f-858e-707f-058d3b1eb214@2ndquadrant.com
Backpatch: 9.4-, where logical decoding has been introduced
src/backend/replication/logical/snapbuild.c