Включение ведения контрольных сумм в кластере PostgreSQL 12: различия между версиями
imported>Vix (Новая страница: «Аппаратура пока несовершенна и данные могут быть повреждены на носителе, при передаче д...») |
Vix (обсуждение | вклад) Нет описания правки |
||
Строка 65: | Строка 65: | ||
* [https://blog.programs74.ru/how-to-enable-checksums-in-postgresql/ Источник] | * [https://blog.programs74.ru/how-to-enable-checksums-in-postgresql/ Источник] | ||
* [https://postgrespro.ru/docs/enterprise/13/integrity-checks#CHECKING-INTEGRITY-AT-SERVER-STARTUP Проверки целостности PostgresPro] | * [https://postgrespro.ru/docs/enterprise/13/integrity-checks#CHECKING-INTEGRITY-AT-SERVER-STARTUP Проверки целостности PostgresPro] | ||
* [https://www.pgconfig.org/#/?max_connections=100&pg_version=16&environment_name=WEB&total_ram=4&cpus=2&drive_type=SSD&arch=x86-64&os_type=linux PgConfig] |
Текущая версия от 17:08, 25 января 2024
Аппаратура пока несовершенна и данные могут быть повреждены на носителе, при передаче данных по интерфейсным кабелям и т.п.
Часть таких ошибок обрабатывается на аппаратном уровне, но часть — увы нет.
Чтобы вовремя обнаружить возникшую проблему, в 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