Влияние checksums на производительность


#1

А как оценить какое влияние окажет включение checksum на производительность? Понятно что много факторов и лучшего всего померить, но интересует примерное проседание исходя из вашего опыта.


#2

Не нужно ничего оценивать. Без контрольных сумм ваша БД может по-тихому превратиться в тыкву (вместе с бекапами) обеспечив вам, например, недельный даунтайм.
Если для вас это ОК - можете вообще много чего выключить, например, fsync, WAL писать на tempfs, использовать UNLOGGED таблицы, всё такое. Или вообще посмотреть в сторону MyISAM.


#3

Вопрос задают часто, поэтому провел простенький тест.

achtung!! Не является поводом отключать чексуммы!

Имеем: i7-4510U CPU @ 2.00GHz, 16GB RAM, 6Gb/s SATA SSD

Конфиг используем дефолтный.

Без чексумм:

postgres@stepannb:~/checksum_test$ /opt/pgpro/std-11/bin/initdb -D nochs/
—skipped—
Data page checksums are disabled.
—skipped—
postgres@stepannb:~/checksum_test$ /opt/pgpro/std-11/bin/pg_ctl -D nochs/ -l logfile start
waiting for server to start… done
server started
postgres@stepannb:~/checksum_test$ psql -c ‘CREATE DATABASE pgb1000’
CREATE DATABASE
postgres@stepannb:~/checksum_test$ time pgbench -i -s 1000 -q pgb1000
—skipped—
100000000 of 100000000 tuples (100%) done (elapsed 594.72 s, remaining 0.00 s)
vacuuming…
creating primary keys…
done.

real 20m11,958s
user 0m31,556s
sys 0m0,651s
postgres@stepannb:~/checksum_test$ pgbench -c 50 -j 2 -T 300 pgb1000
starting vacuum…end.
transaction type: <builtin: TPC-B (sort of)>
scaling factor: 1000
query mode: simple
number of clients: 50
number of threads: 2
duration: 300 s
number of transactions actually processed: 233608
latency average = 64.233 ms
tps = 778.413158 (including connections establishing)
tps = 778.420850 (excluding connections establishing)

Чексуммы включены

postgres@stepannb:~/checksum_test$ /opt/pgpro/std-11/bin/initdb -k -D chs/
—skipped—
Data page checksums are enabled.
—skipped—
postgres@stepannb:~/checksum_test$ /opt/pgpro/std-11/bin/pg_ctl -D chs -l logfile start
waiting for server to start… done
server started
postgres@stepannb:~/checksum_test$ psql -c ‘CREATE DATABASE pgb1000’
CREATE DATABASE
postgres@stepannb:~/checksum_test$ time pgbench -i -s 1000 -q pgb1000
—skipped—
100000000 of 100000000 tuples (100%) done (elapsed 709.67 s, remaining 0.00 s)
vacuuming…
creating primary keys…
done.

real 37m21,765s
user 0m33,363s
sys 0m0,720s
postgres@stepannb:~/checksum_test$ pgbench -c 50 -j 2 -T 300 pgb1000
starting vacuum…end.
transaction type: <builtin: TPC-B (sort of)>
scaling factor: 1000
query mode: simple
number of clients: 50
number of threads: 2
duration: 300 s
number of transactions actually processed: 169562
latency average = 88.492 ms
tps = 565.019843 (including connections establishing)
tps = 565.189177 (excluding connections establishing)


Генерация датасета без чексумм заняла 20 минут 12 секунд из которых на генерацию ушло 595 секунды, и 617 секунд на вакуум и индексирование.

За 300 секунд TPCB-like бенчмарка было совершено 233608 транзакций, скорость 778 tps.

Генерация датасета с чексуммами заняла 37 минут 22 секунды из которых на генерацию ушло 709 секунд, и 1533 секунд на вакуум и индексирование.

За 300 секунд TPCB-like бенчмарка было совершено 169562 транзакций, скорость 565 tps.