Обсуждение: pgsql: Change CRCs in WAL records from 64bit to 32bit for performance

Поиск
Список
Период
Сортировка

pgsql: Change CRCs in WAL records from 64bit to 32bit for performance

От
tgl@svr1.postgresql.org (Tom Lane)
Дата:
Log Message:
-----------
Change CRCs in WAL records from 64bit to 32bit for performance reasons.
Instead of a separate CRC on each backup block, include backup blocks
in their parent WAL record's CRC; this is important to ensure that the
backup block really goes with the WAL record, ie there was not a page
tear right at the start of the backup block.  Implement a simple form
of compression of backup blocks: drop any run of zeroes starting at
pd_lower, so as not to store the unused 'hole' that commonly exists in
PG heap and index pages.  Tweak PageRepairFragmentation and related
routines to ensure they keep the unused space zeroed, so that the above
compression method remains effective.  All per recent discussions.

Modified Files:
--------------
    pgsql/src/backend/access/nbtree:
        nbtpage.c (r1.84 -> r1.85)
        (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/access/nbtree/nbtpage.c.diff?r1=1.84&r2=1.85)
        nbtxlog.c (r1.20 -> r1.21)
        (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/access/nbtree/nbtxlog.c.diff?r1=1.20&r2=1.21)
    pgsql/src/backend/access/transam:
        xlog.c (r1.194 -> r1.195)
        (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/access/transam/xlog.c.diff?r1=1.194&r2=1.195)
    pgsql/src/backend/storage/page:
        bufpage.c (r1.63 -> r1.64)
        (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/storage/page/bufpage.c.diff?r1=1.63&r2=1.64)
    pgsql/src/backend/utils/hash:
        pg_crc.c (r1.12 -> r1.13)
        (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/hash/pg_crc.c.diff?r1=1.12&r2=1.13)
    pgsql/src/bin/pg_controldata:
        pg_controldata.c (r1.23 -> r1.24)
        (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/bin/pg_controldata/pg_controldata.c.diff?r1=1.23&r2=1.24)
    pgsql/src/bin/pg_resetxlog:
        pg_resetxlog.c (r1.32 -> r1.33)
        (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/bin/pg_resetxlog/pg_resetxlog.c.diff?r1=1.32&r2=1.33)
    pgsql/src/include/access:
        xlog.h (r1.61 -> r1.62)
        (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/include/access/xlog.h.diff?r1=1.61&r2=1.62)
        xlog_internal.h (r1.6 -> r1.7)
        (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/include/access/xlog_internal.h.diff?r1=1.6&r2=1.7)
    pgsql/src/include/catalog:
        pg_control.h (r1.21 -> r1.22)
        (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/include/catalog/pg_control.h.diff?r1=1.21&r2=1.22)
    pgsql/src/include/utils:
        pg_crc.h (r1.12 -> r1.13)
        (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/include/utils/pg_crc.h.diff?r1=1.12&r2=1.13)

Re: pgsql: Change CRCs in WAL records from 64bit to 32bit

От
Bruce Momjian
Дата:
I have trimmed TODO.detail to remove the completed items.

---------------------------------------------------------------------------

Tom Lane wrote:
> Log Message:
> -----------
> Change CRCs in WAL records from 64bit to 32bit for performance reasons.
> Instead of a separate CRC on each backup block, include backup blocks
> in their parent WAL record's CRC; this is important to ensure that the
> backup block really goes with the WAL record, ie there was not a page
> tear right at the start of the backup block.  Implement a simple form
> of compression of backup blocks: drop any run of zeroes starting at
> pd_lower, so as not to store the unused 'hole' that commonly exists in
> PG heap and index pages.  Tweak PageRepairFragmentation and related
> routines to ensure they keep the unused space zeroed, so that the above
> compression method remains effective.  All per recent discussions.
>
> Modified Files:
> --------------
>     pgsql/src/backend/access/nbtree:
>         nbtpage.c (r1.84 -> r1.85)
>         (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/access/nbtree/nbtpage.c.diff?r1=1.84&r2=1.85)
>         nbtxlog.c (r1.20 -> r1.21)
>         (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/access/nbtree/nbtxlog.c.diff?r1=1.20&r2=1.21)
>     pgsql/src/backend/access/transam:
>         xlog.c (r1.194 -> r1.195)
>         (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/access/transam/xlog.c.diff?r1=1.194&r2=1.195)
>     pgsql/src/backend/storage/page:
>         bufpage.c (r1.63 -> r1.64)
>         (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/storage/page/bufpage.c.diff?r1=1.63&r2=1.64)
>     pgsql/src/backend/utils/hash:
>         pg_crc.c (r1.12 -> r1.13)
>         (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/hash/pg_crc.c.diff?r1=1.12&r2=1.13)
>     pgsql/src/bin/pg_controldata:
>         pg_controldata.c (r1.23 -> r1.24)
>
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/bin/pg_controldata/pg_controldata.c.diff?r1=1.23&r2=1.24)
>     pgsql/src/bin/pg_resetxlog:
>         pg_resetxlog.c (r1.32 -> r1.33)
>         (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/bin/pg_resetxlog/pg_resetxlog.c.diff?r1=1.32&r2=1.33)
>     pgsql/src/include/access:
>         xlog.h (r1.61 -> r1.62)
>         (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/include/access/xlog.h.diff?r1=1.61&r2=1.62)
>         xlog_internal.h (r1.6 -> r1.7)
>         (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/include/access/xlog_internal.h.diff?r1=1.6&r2=1.7)
>     pgsql/src/include/catalog:
>         pg_control.h (r1.21 -> r1.22)
>         (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/include/catalog/pg_control.h.diff?r1=1.21&r2=1.22)
>     pgsql/src/include/utils:
>         pg_crc.h (r1.12 -> r1.13)
>         (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/include/utils/pg_crc.h.diff?r1=1.12&r2=1.13)
>
> ---------------------------(end of broadcast)---------------------------
> TIP 6: Have you searched our list archives?
>
>                http://archives.postgresql.org
>

--
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073

Re: pgsql: Change CRCs in WAL records from 64bit to 32bit

От
Tom Lane
Дата:
Bruce Momjian <pgman@candle.pha.pa.us> writes:
> I have trimmed TODO.detail to remove the completed items.

You removed far too much.

            regards, tom lane

Re: pgsql: Change CRCs in WAL records from 64bit to 32bit

От
Bruce Momjian
Дата:
Tom Lane wrote:
> Bruce Momjian <pgman@candle.pha.pa.us> writes:
> > I have trimmed TODO.detail to remove the completed items.
>
> You removed far too much.

OK, would you trim it from CVS and commit.  I have restored it.

--
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073