• Tomas Vondra's avatar
    Optimize partial TOAST decompression · 11a078cf
    Tomas Vondra authored
    Commit 4d0e994e added support for partial TOAST decompression, so the
    decompression is interrupted after producing the requested prefix. For
    prefix and slices near the beginning of the entry, this may saves a lot
    of decompression work.
    
    That however only deals with decompression - the whole compressed entry
    was still fetched and re-assembled, even though the compression used
    only a small fraction of it. This commit improves that by computing how
    much compressed data may be needed to decompress the requested prefix,
    and then fetches only the necessary part.
    
    We always need to fetch a bit more compressed data than the requested
    (uncompressed) prefix, because the prefix may not be compressible at all
    and pglz itself adds a bit of overhead. That means this optimization is
    most effective when the requested prefix is much smaller than the whole
    compressed entry.
    
    Author: Binguo Bao
    Reviewed-by: Andrey Borodin, Tomas Vondra, Paul Ramsey
    Discussion: https://www.postgresql.org/message-id/flat/CAL-OGkthU9Gs7TZchf5OWaL-Gsi=hXqufTxKv9qpNG73d5na_g@mail.gmail.com
    11a078cf
pg_lzcompress.h 2.69 KB