Оптимизировать (диск / память) докеризованную postgres базу данных, содержащую тестовые данные - PullRequest
1 голос
/ 15 апреля 2020

Контекст

Для локальной разработки и тестирования в конвейере CI я хочу образ postgres docker, содержащий некоторые данные, взятые из производства (несколько десятков МБ) , Я буду периодически перестраивать этот образ, чтобы выборочные данные оставались свободными sh.

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

То, что я построил

У меня есть файл docker, который создается поверх одного из официальных postgres (postgis) docker изображений, но фактически он инициализирует базу данных и использует pg_restore для вставки моих образцов данных.

Попытка оптимизации

Я использую многоступенчатая сборка, просто копирование каталога postgres в окончательный образ (это помогает, поскольку я использовал узел во время сборки).

Я заметил, что каталог pg_xlog довольно большой, и логически кажется здесь избыточным так как я с радостью проверил бы контрольно-пропускной пункт и угробил бы любой WAL прежде, чем запечатать изображение. Я не могу понять, как избавиться от этого. Я попытался запустить postgres со следующими флагами: -min_wal_size=2 --max_wal_size=3 --archive_mode=off --wal_keep_segments и запустить Checkpoint и подождать несколько секунд, но, похоже, это ничего не меняет. Я также попытался удалить содержимое каталога, но, похоже, это повредило базу данных при следующем запуске.

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

Резюме / вопросы

Правильно ли я поступаю? Если да, то какие виды оптимизации дисков / памяти я могу использовать? В частности, я могу удалить / уменьшить pg_xlog?


Я использую Postgres 9.5 и Postgis 2.X.

1 Ответ

1 голос
/ 15 апреля 2020

Был ли сервер когда-либо работать с max_wal_size больше 3? Если это так, он мог бы «перерабатывать» много файлов формата wal, переименовывая старые для будущего использования. После того, как они переименованы, они никогда не будут удалены до тех пор, пока они не будут использованы, даже если впоследствии max_wal_size будет уменьшен.

Я также пытался удалить содержимое каталога, но, похоже, это сломало базу данных на его следующий запуск.

Это можно исправить с помощью pg_resetxlog. Только не заводите это вслепую, очень опасно бегать за пределами тестовой среды.

...