]> granicus.if.org Git - postgresql/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)
commit524dbc14335cde0b18745f05a9112436d212f061
tree176f9497f41e1e95a93cf2acf1c42404bd034b3c
parent955a684e0401954a58e956535107bc4b7136d952
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