Re: Enabling Checksums

Поиск
Список
Период
Сортировка
От Greg Smith
Тема Re: Enabling Checksums
Дата
Msg-id 50F5F61E.2000806@2ndQuadrant.com
обсуждение исходный текст
Ответ на Re: Enabling Checksums  (Greg Smith <greg@2ndQuadrant.com>)
Ответы Re: Enabling Checksums  (Jeff Davis <pgsql@j-davis.com>)
Список pgsql-hackers
First rev of a simple corruption program is attached, in very C-ish
Python.  The parameters I settled on are to accept a relation name, byte
offset, byte value, and what sort of operation to do:  overwrite, AND,
OR, XOR.  I like XOR here because you can fix it just by running the
program again.  Rewriting this in C would not be terribly difficult, and
most of the time spent on this version was figuring out what to do.

This follows Jeff's idea that the most subtle corruption is the hardest
to spot, so testing should aim at the smallest unit of change.  If you
can spot a one bit error in an unused byte of a page, presumably that
will catch large errors like a byte swap.  I find some grim amusement
that the checksum performance testing I've been trying to do got stuck
behind a problem with a tiny, hard to detect single bit of corruption.

Here's pgbench_accounts being corrupted, the next to last byte on this line:

$ pgbench -i -s 1
$ ./pg_corrupt pgbench_accounts show
Reading byte 0 within file /usr/local/var/postgres/base/16384/25242
Current byte= 0 / $00
$ hexdump /usr/local/var/postgres/base/16384/25242 | head
0000000 00 00 00 00 00 00 00 00 00 00 04 00 0c 01 80 01
...
$ ./pg_corrupt pgbench_accounts 14 1
/usr/local/var/postgres base/16384/25242 8192 13434880 1640
Reading byte 14 within file /usr/local/var/postgres/base/16384/25242
Current byte= 128 / $80
Modified byte= 129 / $81
File modified successfully
$ hexdump /usr/local/var/postgres/base/16384/25242 | head
0000000 00 00 00 00 00 00 00 00 00 00 04 00 0c 01 81 01

That doesn't impact selecting all of the rows:

$ psql -c "select count(*) from pgbench_accounts"
  count
--------
  100000

And pg_dump works fine against the table too.  Tweaking this byte looks
like a reasonable first test case for seeing if checksums can catch an
error that query execution doesn't.

Next I'm going to test the functional part of the latest checksum patch;
duplicate Jeff's targeted performance tests; and then run some of my
own.  I wanted to get this little tool circulating now that it's useful
first.

--
Greg Smith   2ndQuadrant US    greg@2ndQuadrant.com   Baltimore, MD
PostgreSQL Training, Services, and 24x7 Support www.2ndQuadrant.com

Вложения

В списке pgsql-hackers по дате отправления:

Предыдущее
От: Michael Paquier
Дата:
Сообщение: Re: Parallel query execution
Следующее
От: Tom Lane
Дата:
Сообщение: Re: Curious buildfarm failures (fwd)