Сжатие базы данных PostgreSQL.

Сжатие базы данных PostgreSQL.

При использовании PostgreSQL в O&K Print Watch и настройке сохранения содержимого распечатанных документов, размер базы данных на диске может быть очень большим. Используйте ограничение по размеру для хранения распечатанных документов в O&K Print Watch.

Одной из особенностей PostgreSQL является накопление "мертвых" записей, которые возникают в результате обновлений и удаления данных. Чтобы оптимизировать производительность базы данных и освободить занимаемое пространство, необходимо периодически использовать команду VACUUM.

Почему размер базы данных не уменьшается при удалении записей?

Когда записи удаляются в PostgreSQL, они не удаляются физически с диска сразу. Вместо этого они помечаются как "мертвые" и становятся недоступными для будущих запросов. Физическое удаление мертвых записей и освобождение занимаемого ими пространства осуществляется только с помощью команды VACUUM FULL.

Важно понимать, что стандартный VACUUM освобождает пространство внутри таблицы для повторного использования, но это пространство не возвращается операционной системе. Только VACUUM FULL сжимает таблицы и уменьшает их физический размер на диске, возвращая неиспользуемое пространство.

Что делает VACUUM?

Команда VACUUM FULL выполняет очистку базы данных, удаляя мертвые записи и освобождая пространство, которое затем может быть использовано для новых операций. Ее выполнение возвращает неиспользуемое пространство операционной системе.

Этот процесс требует эксклюзивной блокировки таблиц, что делает её недоступной для других операций на время выполнения. Рекомендуется запускать процесс сжатия БД PRNWATCH в нерабочее время, когда никто из пользователей не печатает.

Пример использования VACUUM FULL в pgAdmin:

  1. Откройте pgAdmin и подключитесь к базе данных PRNWATCH.

  2. Щелкните правой кнопкой мыши на таблице и выберите "Maintenance...".

  3. В открывшемся окне выберите опцию "VACUUM".

  4. Установите переключатели FULL и ANALYZE.

  5. pgAdmin выполнит операцию и предоставит отчет о её завершении.

Пример запуска VACUUM FULL с использованием psql:

  1. В командной строке устанавливаете переменную окружения PGPASSWORD и присваиваете ей текущий пароль пользователя postgres:
    set PGPASSWORD = пароль
  2. Запускаете сжатие:
    psql -U postgres -d PRNWATCH -c "VACUUM FULL VERBOSE;"
  3. Запускаете реиндексацию:
    psql -U postgres -d PRNWATCH -c "REINDEX DATABASE PRNWATCH;"

Важно: При выполнении VACUUM FULL PostgreSQL временно создает полную копию таблицы, что требует наличие свободного пространства на диске с БД.

Пример уменьшения размера БД с использованием Backup и Restore:

Если в базе данных накопилось много неиспользуемого пространства, но операция VACUUM FULL недоступна из-за нехватки дискового пространства или времени простоя, можно воспользоваться стратегией Backup и Restore для уменьшения размера базы данных на диске.

Шаги для выполнения Backup и Restore с использованием pgAdmin:

  1. Откройте pgAdmin и подключитесь к серверу базы данных.

  2. Щелкните правой кнопкой мыши на базе данных PRNWATCH и выберите "Backup...".

  3. В открывшемся окне укажите имя файла резервной копии и выберите формат "Custom".

  4. На закладке Data Options используйте переключатель Blobs для включения содержимого распечатанных документов в резервную копию.

  5. Нажмите "OK", чтобы создать резервную копию.

  6. Удалите существующую базу данных:
    • Щелкните правой кнопкой мыши на базе данных и выберите "Delete ".
    • Подтвердите удаление.

  7. Создайте новую базу данных:
    • Щелкните правой кнопкой мыши на сервере и выберите "Create > Database...".
    • Введите имя новой базы данных PRNWATCH и нажмите "Save".

  8. Восстановите данные из резервной копии:
    • Щелкните правой кнопкой мыши на новой базе данных и выберите "Restore...".
    • В открывшемся окне выберите файл резервной копии и нажмите "Restore".

  9. После восстановления БД PRNWATCH необходимо перезапустить O&K Print Watch Service.

Использование PostgreSQL как сервер базы данных в O&K Print Watch.