В настоящее время я работаю со встроенной системой, которая использует Postgresql для хранения данных. В настоящее время у нас есть проблема, при которой ящики иногда перезагружаются без предупреждения и без надлежащего выключения. Это, очевидно, в некоторых случаях оставляет у нас проблемы с базой данных (наиболее распространенным признаком является неверный заголовок страницы в некоторых таблицах с высоким трафиком).
Я хочу знать, как проще всего исправить ошибки? Я, очевидно, собираюсь потерять данные, но поскольку ошибки обычно возникают в таблицах, в которых есть эфемерные данные, мне все равно, я просто хочу вернуть систему в рабочее состояние.
Сейчас наша процедура состоит в том, чтобы отбросить и воссоздать все пораженные таблицы. Есть ли что-нибудь еще, что мы могли бы сделать быстрее? Как я уже сказал, я нормально отношусь к потере любых данных на затронутой странице, я просто хочу, чтобы это работало.
Платформа - Ubuntu 7.04, Postgresql 8.2 (прямо сейчас мы не можем принудительно выполнить обновление для клиента). Файловая система ext3, на карте CF 2 гигабайта.
Очевидно, что исправление неожиданных перезагрузок - моя первоочередная задача, но прогресс в этом вопросе медленный (это сложно воспроизвести в лаборатории). А пока я надеюсь на более простое решение, которое позволит нашим специалистам на местах быстрее справляться с возникающими проблемами.
Просто хочу следить за бандажом, на случай, если это кому-то понадобится:
Вы можете включить zero_damaged_pages и запустите VACCUUM для затронутой таблицы, это должно очистить все страницы, содержащие данные об известных дефектах. Однако это не защитит вас от незаметного повреждения значений столбцов, поскольку PostgreSQL на данный момент не выполняет контрольные суммы своих данных на уровне блоков / страниц.
Так что это крайний вариант, всегда предпочтительнее устранить источник проблем;).
Вы пробовали установить Метод синхронизации WAL к fsync_writethrough
?