Включение ведения контрольных сумм в кластере PostgreSQL 12

Материал из support.qbpro.ru
Версия от 17:08, 25 января 2024; Vix (обсуждение | вклад)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)

Аппаратура пока несовершенна и данные могут быть повреждены на носителе, при передаче данных по интерфейсным кабелям и т.п.
Часть таких ошибок обрабатывается на аппаратном уровне, но часть — увы нет.
Чтобы вовремя обнаружить возникшую проблему, в PostgreSQL журнальные записи всегда снабжаются контрольными суммами. Страницы данных также можно защитить контрольными суммами.

  • Как это сделать? Читаем ниже.

Исходные данные: Кластер PostgreSQL 12
Задача: Включить защиту страниц данных контрольными суммами.

Включить защиту страниц данных контрольными суммами можно сделать только при инициализации кластера, но в версии PostgreSQL 12 ее можно включать\ выключать с помощью утилиты pg_checksums
(правда, пока не «на лету», а только при остановленном кластер).

В производственной среде контрольные суммы обязательно должны быть включены, несмотря на накладные расходы на их вычисление и контроль. Это уменьшает вероятность того, что сбой не будет вовремя обнаружен.

Вначале убедимся, что ведение контрольных сумм выключено:

su - postgres -c 'psql -c "SHOW data_checksums;"'

Если выведет off, то ведение контрольных сумм выключено:

data_checksums
----------------
 off
(1 row)

Теперь останавливаем кластер для включения контрольных сумм:

pg_ctlcluster 12 main stop

Проверяем:

su - postgres -c '/usr/lib/postgresql/12/bin/pg_controldata -D "/var/lib/postgresql/12/main"' | grep state

Если выведет:

Database cluster state:               shut down
То можно включать контрольные суммы:
su - postgres -c '/usr/lib/postgresql/12/bin/pg_checksums --enable -D "/var/lib/postgresql/12/main"'

Утилиты pg_checksums выведет такое сообщение:

Checksum operation completed
Files scanned:  961
Blocks scanned: 2996
pg_checksums: syncing data directory
pg_checksums: updating control file
Checksums enabled in cluster

Это означает, что защита страниц данных контрольными суммами включена.

Запускаем кластер:

pg_ctlcluster 12 main start

Проверяем включение контрольных сумм:

su - postgres -c 'psql -c "SHOW data_checksums;"'

Должно вывести:

data_checksums
----------------
 on
(1 row)

Так же можно проверить включение контрольных сумм с помощью утилиты pg_controldata:

su - postgres -c '/usr/lib/postgresql/12/bin/pg_controldata -D "/var/lib/postgresql/12/main" | grep checksum'

Должно вывести:

просмотреть источникраспечатать?
Data page checksum version:           1