• Andres Freund's avatar
    Avoid superfluous work for commits during logical slot creation. · 524dbc14
    Andres Freund authored
    Before 955a684e 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 955a684e 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
    524dbc14
snapbuild.c 60.1 KB