• Tom Lane's avatar
    Improve performance of binary COPY FROM through better buffering. · 0a0727cc
    Tom Lane authored
    At least on Linux and macOS, fread() turns out to have far higher
    per-call overhead than one could wish.  Reading 64KB of data at a time
    and then parceling it out with our own memcpy logic makes binary COPY
    from a file significantly faster --- around 30% in simple testing for
    cases with narrow text columns (on Linux ... even more on macOS).
    
    In binary COPY from frontend, there's no per-call fread(), and this
    patch introduces an extra layer of memcpy'ing, but it still manages
    to eke out a small win.  Apparently, the control-logic overhead in
    CopyGetData() is enough to be worth avoiding for small fetches.
    
    Bharath Rupireddy and Amit Langote, reviewed by Vignesh C,
    cosmetic tweaks by me
    
    Discussion: https://postgr.es/m/CALj2ACU5Bz06HWLwqSzNMN=Gupoj6Rcn_QVC+k070V4em9wu=A@mail.gmail.com
    0a0727cc
copy.c 149 KB