powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Давайте обсудим проверку контрольных сум для файлов.
38 сообщений из 38, показаны все 2 страниц
Давайте обсудим проверку контрольных сум для файлов.
    #39709343
Синий Слон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день.

Пытаюсь протестировать и найти пользу от этой опции.


--data-checksums

Применять контрольные суммы на страницах данных для выявления сбоев при вводе/выводе, которые иначе останутся незамеченными. Расчёт контрольных сумм может значительно повлияет на производительность. Этот режим можно включить только при инициализации и нельзя изменить позже. Когда контрольные суммы включены, они рассчитываются для всех объектов и во всех базах данных.




Возникла несколько вопросов:


1) Я так понял, что предупреждение сработает только при попытки чтения\записи файла данных.

Код: sql
1.
ПРЕДУПРЕЖДЕНИЕ:  ошибка проверки страницы: получена контрольная сумма ..., а ожидалась - .....


одновременно с
Код: sql
1.
ОШИБКА:  неверная страница в блоке 0 отношения ...



Так ли это?




2) При получении ошибки просто получаем запись в логе и ошибка отправляется клиентскому соединению. И все, БД продолжает работать как и работала все остальные объекты БД доступны в полной мере?



3) На сколько сильная дополнительная нагрузка на IO создается этой опцией?
...
Рейтинг: 0 / 0
Давайте обсудим проверку контрольных сум для файлов.
    #39709369
Синий Слон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то не пойму как эта штука работает.

Сделал следующее:

1) взял тестувую таблицу, в которой около 60 тыс строк.

2) остановил постгрес и в файле удалил около 10% содержания, сохранив файл таблицы и _fsm файл в другом каталоге.

3) после запуска постгреса, попробовал сделать SELECT из этой таблицы - получил

Код: sql
1.
2.
ПРЕДУПРЕЖДЕНИЕ:  ошибка проверки страницы: получена контрольная сумма ..., а ожидалась - .....
ОШИБКА:  неверная страница в блоке 0 отношения ...



4) заменил файлы таблицы на пустые, при этом SELECT из таблицы стал отрабатывать и выдавать 0 строк, без ошибок.



и тут начинается самое интересное....


...
Рейтинг: 0 / 0
Давайте обсудим проверку контрольных сум для файлов.
    #39709372
Синий Слон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1) меняю пустые файлы таблицы на оригинальные (которые отдельно сохранил).

2) делаю SELECT из таблицы и получаю 0 строк (должно быть 60 тыс.)

При этом никаких ошибок нет.


3) Слегка удивляюсь и делаю вакуум таблички (не фул), получаю кучу сообщений:

ПРЕДУПРЕЖДЕНИЕ: в отношении "test_table" не инициализирована страница 484 --- ситуация исправляется
ПРЕДУПРЕЖДЕНИЕ: в отношении "test_table" не инициализирована страница 485 --- ситуация исправляется
ПРЕДУПРЕЖДЕНИЕ: в отношении "test_table" не инициализирована страница 486 --- ситуация исправляется
ПРЕДУПРЕЖДЕНИЕ: в отношении "test_table" не инициализирована страница 487 --- ситуация исправляется


4) После размеры файлов становяться =0 и SELECT к таблице возвращает 0 строк.





Как так?
...
Рейтинг: 0 / 0
Давайте обсудим проверку контрольных сум для файлов.
    #39709373
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Синий Слон1) Я так понял, что предупреждение сработает только при попытки чтения\записи файла данных.
Да, только при поднятии страницы в shared_buffers с диска или кеша ОС. Тем что находятся в shared_buffers - верим.

pg11 будет во время basebackup валидировать все страницы.
pg_verify_checksums на живом кластере пока в обсуждениях для pg12...

Синий Слон2) При получении ошибки просто получаем запись в логе и ошибка отправляется клиентскому соединению. И все, БД продолжает работать как и работала все остальные объекты БД доступны в полной мере?
Варнинг при чтении страницы всегда: https://github.com/postgres/postgres/blob/REL_10_STABLE/src/backend/storage/page/bufpage.c#L149
Ошибка или варнинг (если запросили zero_damaged_pages) при размещении в буфер: https://github.com/postgres/postgres/blob/REL_10_STABLE/src/backend/storage/buffer/bufmgr.c#L901
Целиком кластер не складывается.

Синий Слон3) На сколько сильная дополнительная нагрузка на IO создается этой опцией?
ondisk format не изменялся, страницы как писались блоками по BLKSIZE байта (8кб дефолт), так и пишутся. В заголовке страницы переиспользовали пару байт под хранение чексуммы.

В целом - если есть возможность их включать - включайте. Пока включать можно только во время initdb, что представляет большую сложность для уже существующих баз... Патч в процессе обсуждений.
...
Рейтинг: 0 / 0
Давайте обсудим проверку контрольных сум для файлов.
    #39709374
Синий Слон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сейчас перед заменой файлов остановил постгрес и заменил 0-е на оригинальные при остановленном посгрес.

результат тот же.


Как так? о_О
...
Рейтинг: 0 / 0
Давайте обсудим проверку контрольных сум для файлов.
    #39709375
Синий Слон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Melkij,

спасибо за ответ.

Версия 10.5




Честно говря, не понимаю, почему файлы таблицы не могу вернуть назад
...
Рейтинг: 0 / 0
Давайте обсудим проверку контрольных сум для файлов.
    #39709377
Синий Слон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
analyze без ошибок проходит.
...
Рейтинг: 0 / 0
Давайте обсудим проверку контрольных сум для файлов.
    #39709379
Синий Слон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так файлы таблицы обратно подпихнуть и не получилось, чтобы данные видны были.


может быть там требуется какое-то "обнуление" статистики по контрольным суммам или еще что-то?
...
Рейтинг: 0 / 0
Давайте обсудим проверку контрольных сум для файлов.
    #39709388
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Синий Слон,

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

А по поводу подпихивания датафайлов - я сильно сомневаюсь, что вы пытаетесь подпихнуть именно данные, а не уже пустой файл. Потому что единственно место которое переводится как "в отношении "%s" не инициализирована страница %u --- ситуация исправляется" - это весьма банальная проверка на PageIsNew https://github.com/postgres/postgres/blob/REL_10_STABLE/src/backend/commands/vacuumlazy.c#L857
...
Рейтинг: 0 / 0
Давайте обсудим проверку контрольных сум для файлов.
    #39709437
Синий Слон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MelkijСиний Слон,

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

А по поводу подпихивания датафайлов - я сильно сомневаюсь, что вы пытаетесь подпихнуть именно данные, а не уже пустой файл. Потому что единственно место которое переводится как "в отношении "%s" не инициализирована страница %u --- ситуация исправляется" - это весьма банальная проверка на PageIsNew https://github.com/postgres/postgres/blob/REL_10_STABLE/src/backend/commands/vacuumlazy.c#L857


Пытаюсь скопировать сохраненные в девственном виде файлы, до всех манипуляций в замен полностью пустых файлов.

И данные в них не видны постгресом, а посли вакуума эти файлы, которые скопировал с данными становятся пустыми.

Можете сами попробовать, если не верите.

Я не понимаю почему так происходит
...
Рейтинг: 0 / 0
Давайте обсудим проверку контрольных сум для файлов.
    #39709708
Синий Слон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Синий СлонMelkijСиний Слон,

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

А по поводу подпихивания датафайлов - я сильно сомневаюсь, что вы пытаетесь подпихнуть именно данные, а не уже пустой файл. Потому что единственно место которое переводится как "в отношении "%s" не инициализирована страница %u --- ситуация исправляется" - это весьма банальная проверка на PageIsNew https://github.com/postgres/postgres/blob/REL_10_STABLE/src/backend/commands/vacuumlazy.c#L857


Пытаюсь скопировать сохраненные в девственном виде файлы, до всех манипуляций в замен полностью пустых файлов.

И данные в них не видны постгресом, а посли вакуума эти файлы, которые скопировал с данными становятся пустыми.

Можете сами попробовать, если не верите.

Я не понимаю почему так происходит


На новой тестовой табличке получилось.
...
Рейтинг: 0 / 0
Давайте обсудим проверку контрольных сум для файлов.
    #39709709
Синий Слон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И все-таки, не понял как эта штука работает:

1) создаю табличку, заполняю данными.

2) копирую файлы в безопасное место.

3) заменяю пустыми фалами.

4) при попытке встасить данные в табличку с пустыми файлами ошибка:
...
Рейтинг: 0 / 0
Давайте обсудим проверку контрольных сум для файлов.
    #39709710
Синий Слон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Копирую обратно файлы - все норм.


Теперь порчу файл, удаляю пару символов.
...
Рейтинг: 0 / 0
Давайте обсудим проверку контрольных сум для файлов.
    #39709714
Синий Слон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При выборке получаю ошибку
...
Рейтинг: 0 / 0
Давайте обсудим проверку контрольных сум для файлов.
    #39709716
Синий Слон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
заменяю файлы на пустые - и в них спокойно вставляется новые строки...
...
Рейтинг: 0 / 0
Давайте обсудим проверку контрольных сум для файлов.
    #39709718
Синий Слон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
непонятно почему не вставлялись строки, после замены фалов на пустые, когда не портил файл БД.
...
Рейтинг: 0 / 0
Давайте обсудим проверку контрольных сум для файлов.
    #39709793
Синий Слон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и кому-нибудь реально помогала эта опция по проверке чексум?


У меня на тестировании пока ошибка о контрольной сумме ТОЛЬКО вместе с "неверная страница в блоке" выскакивает.

Пока не понял пользу от этой опции. (-k)
...
Рейтинг: 0 / 0
Давайте обсудим проверку контрольных сум для файлов.
    #39709797
Синий Слон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какая от нее польза? Можете объяснить на пальцах?
...
Рейтинг: 0 / 0
Давайте обсудим проверку контрольных сум для файлов.
    #39709815
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Синий Слон Расчёт контрольных сумм может значительно повлияет на производительность.
PostgreSQL не использует CRC32C с аппаратным ускорением?..
...
Рейтинг: 0 / 0
Давайте обсудим проверку контрольных сум для файлов.
    #39709823
Синий Слон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovСиний Слон Расчёт контрольных сумм может значительно повлияет на производительность.
PostgreSQL не использует CRC32C с аппаратным ускорением?..

А вы как думаете?
...
Рейтинг: 0 / 0
Давайте обсудим проверку контрольных сум для файлов.
    #39709869
Синий Слон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Синий СлонНу и кому-нибудь реально помогала эта опция по проверке чексум?


У меня на тестировании пока ошибка о контрольной сумме ТОЛЬКО вместе с "неверная страница в блоке" выскакивает.

Пока не понял пользу от этой опции. (-k)


При pg_dump эти ошибки тоже вместе:


pg_dump: ПРЕДУПРЕЖДЕНИЕ: ошибка проверки страницы: получена контрольная сумма 4
0415, а ожидалась - 55142
pg_dump: Ошибка выгрузки таблицы "test": сбой в PQgetResult().
pg_dump: Сообщение об ошибке с сервера: ОШИБКА: неверная страница в блоке 0 отн
ошения base/16384/16533
pg_dump: Выполнялась команда: COPY public.test (id) TO stdout;



Зачем нужна эта опция, если она срабатывает только когда ошибка блока, которая и без нее бы сообщила о повреждении?
...
Рейтинг: 0 / 0
Давайте обсудим проверку контрольных сум для файлов.
    #39709926
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Синий Слон,

а тут вы путаете причину и следствие. Без чексуммы эта ошибка может остаться незамеченной. Ошибка блока - следствие ошибки чексуммы.
...
Рейтинг: 0 / 0
Давайте обсудим проверку контрольных сум для файлов.
    #39709996
Синий Слон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MelkijСиний Слон,

а тут вы путаете причину и следствие. Без чексуммы эта ошибка может остаться незамеченной. Ошибка блока - следствие ошибки чексуммы.


Сейчас проверю...
...
Рейтинг: 0 / 0
Давайте обсудим проверку контрольных сум для файлов.
    #39710000
Синий Слон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Melkij,

проверил.


в класетере без --data-checksums ошибка прекрасно находится при обращении к таблице, с поврежденным файлом.
...
Рейтинг: 0 / 0
Давайте обсудим проверку контрольных сум для файлов.
    #39710003
Синий Слон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так зачем
--data-checksums
нужен?


Какая от него реальная польза?
...
Рейтинг: 0 / 0
Давайте обсудим проверку контрольных сум для файлов.
    #39710023
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Синий Слон,

исказите данные конкретного тапла, а не сломайте страницу.
Код: plaintext
1.
2.
3.
4.
postgres=# select * from foo;
 i |  v  
---+-----
 1 | foo
sed 's/foo/bar/g' -i 10/r/base/12941/16384
Есть checksum - есть ошибка. Нет checksum - вы прочитаете bar там где должно было быть foo и не заметите этого
...
Рейтинг: 0 / 0
Давайте обсудим проверку контрольных сум для файлов.
    #39710031
Синий Слон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MelkijСиний Слон,

исказите данные конкретного тапла, а не сломайте страницу.
Код: plaintext
1.
2.
3.
4.
postgres=# select * from foo;
 i |  v  
---+-----
 1 | foo
sed 's/foo/bar/g' -i 10/r/base/12941/16384
Есть checksum - есть ошибка. Нет checksum - вы прочитаете bar там где должно было быть foo и не заметите этого


я сейчас еще поэкспериментирую, но пока при правке у меня ошибка, даже без опции --data-checksums:
...
Рейтинг: 0 / 0
Давайте обсудим проверку контрольных сум для файлов.
    #39710033
Синий Слон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Melkij,

два раза перепроверил.


второй раз менял xxx на zxx.



Даже без включения --data-checksums сразу пишет ошибку в блоке. Версия 9.4
...
Рейтинг: 0 / 0
Давайте обсудим проверку контрольных сум для файлов.
    #39710037
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Синий Слон,

я могу повторить: исказите данные, а не сломайте страницу целиком.
Пытаться в текстовом редакторе что-то делать с бинарными данными и удивляться результату? Не понимаю.
...
Рейтинг: 0 / 0
Давайте обсудим проверку контрольных сум для файлов.
    #39710046
Синий Слон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MelkijСиний Слон,

я могу повторить: исказите данные, а не сломайте страницу целиком.
Пытаться в текстовом редакторе что-то делать с бинарными данными и удивляться результату? Не понимаю.


Спасибо, сейчас попробую.
...
Рейтинг: 0 / 0
Давайте обсудим проверку контрольных сум для файлов.
    #39710069
Синий Слон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MelkijСиний Слон,

я могу повторить: исказите данные, а не сломайте страницу целиком.
Пытаться в текстовом редакторе что-то делать с бинарными данными и удивляться результату? Не понимаю.


Вы совершенно правы!


Исправил aaa на bbb.

Слева с включенной опцией, справа без опции.
...
Рейтинг: 0 / 0
Давайте обсудим проверку контрольных сум для файлов.
    #39710071
Синий Слон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Melkij,

Большое спасибо!


Я так понимаю что данные могут "сломаться" из-за железа, например, при этом блок останется целый, а внутри будет все что угодно, в том числе и космические цифры и спецсимволы...
...
Рейтинг: 0 / 0
Давайте обсудим проверку контрольных сум для файлов.
    #39710082
Синий Слон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Остался только вопрос на счет нагрузки, дополнительно создаваемой опцией --data-checksums


Получается что при каждом чекпойнте будет расчитываться чексум для каждого измененного файла.
...
Рейтинг: 0 / 0
Давайте обсудим проверку контрольных сум для файлов.
    #39710146
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Синий СлонОстался только вопрос на счет нагрузки, дополнительно создаваемой опцией --data-checksums


Получается что при каждом чекпойнте будет расчитываться чексум для каждого измененного файла.


При каждой записи 8kb изменного блока (а не всего файла на гигабайт). А блок всегда целиком пишется.
Overhead там копеечный для современных процессоров.

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
Давайте обсудим проверку контрольных сум для файлов.
    #39710290
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Синий СлонА вы как думаете?
Я думаю, что его разработчики не могут быть настолько глупы чтобы использовать что-то другое. Но настораживает упоминание "пары байт в заголовке страницы" при том, что CRC32 занимает четыре байта и гораздо удобнее ложится в конец страницы.
...
Рейтинг: 0 / 0
Давайте обсудим проверку контрольных сум для файлов.
    #39710424
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakovнастораживает упоминание "пары байт в заголовке страницы" при том, что CRC32 занимает четыре байта и гораздо удобнее ложится в конец страницы.
Но наковыряли только два байта . И именно в заголовке .

Используется производный от FNV-1a алгоритм. Описание особенностей реализации можно почитать вот здесь в комментарии файла . Не могу никак прокомментировать выбор, поищите топик обсуждений вот к этому коммиту . Раньше crc32 был, как видно по коду.

Синий СлонПолучается что при каждом чекпойнте будет расчитываться чексум для каждого измененного файла.
Если я правильно код читаю - при попадании в shared_buffers и сбросе грязных страниц из shared_buffers.
Для каждой страницы в отдельности (8кб обычно), не файла - это точно.
...
Рейтинг: 0 / 0
Давайте обсудим проверку контрольных сум для файлов.
    #39710798
Синий Слон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Большое спасибо!!!
...
Рейтинг: 0 / 0
Давайте обсудим проверку контрольных сум для файлов.
    #39716386
Sergei.Agalakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
38 сообщений из 38, показаны все 2 страниц
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Давайте обсудим проверку контрольных сум для файлов.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]