• Alvaro Herrera's avatar
    Redesign initialization of partition routing structures · 3f2393ed
    Alvaro Herrera authored
    This speeds up write operations (INSERT, UPDATE, DELETE, COPY, as well
    as the future MERGE) on partitioned tables.
    
    This changes the setup for tuple routing so that it does far less work
    during the initial setup and pushes more work out to when partitions
    receive tuples.  PartitionDispatchData structs for sub-partitioned
    tables are only created when a tuple gets routed through it.  The
    possibly large arrays in the PartitionTupleRouting struct have largely
    been removed.  The partitions[] array remains but now never contains any
    NULL gaps.  Previously the NULLs had to be skipped during
    ExecCleanupTupleRouting(), which could add a large overhead to the
    cleanup when the number of partitions was large.  The partitions[] array
    is allocated small to start with and only enlarged when we route tuples
    to enough partitions that it runs out of space. This allows us to keep
    simple single-row partition INSERTs running quickly.  Redesign
    
    The arrays in PartitionTupleRouting which stored the tuple translation maps
    have now been removed.  These have been moved out into a
    PartitionRoutingInfo struct which is an additional field in ResultRelInfo.
    
    The find_all_inheritors() call still remains by far the slowest part of
    ExecSetupPartitionTupleRouting(). This commit just removes the other slow
    parts.
    
    In passing also rename the tuple translation maps from being ParentToChild
    and ChildToParent to being RootToPartition and PartitionToRoot. The old
    names mislead you into thinking that a partition of some sub-partitioned
    table would translate to the rowtype of the sub-partitioned table rather
    than the root partitioned table.
    
    Authors: David Rowley and Amit Langote, heavily revised by Álvaro Herrera
    Testing help from Jesper Pedersen and Kato Sho.
    Discussion: https://postgr.es/m/CAKJS1f_1RJyFquuCKRFHTdcXqoPX-PYqAd7nz=GVBwvGh4a6xA@mail.gmail.com
    3f2393ed
nodeModifyTable.c 83.9 KB