Включение ведения контрольных сумм в кластере PostgreSQL 12
Аппаратура пока несовершенна и данные могут быть повреждены на носителе, при передаче данных по интерфейсным кабелям и т.п.
Часть таких ошибок обрабатывается на аппаратном уровне, но часть — увы нет.
Чтобы вовремя обнаружить возникшую проблему, в 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