Создание архивной базы данных

В случае ухудшения работы сервера Staffcop Enterprise из-за большого объёма накопленных данных, можно разделить текущую базу данных на две: актуальную и архивную. В актуальной можно оставить данные за текущий календарный год, а в архивную поместить данные за всё предыдущее время работы.

Итогом выполнения всех операций данной инструкции станут:

  • две базы данных:

    • архивная, в которой будут содержаться данные с года хххх до 2022 включительно;

    • текущая, в которой будут храниться данные за 2023 год;

  • возможность выбора базы данных для просмотра.

Предупреждение

Перед созданием архивной базы данных сделайте бэкап БД. Резервное копирование гарантирует восстановление данных при потере.

Создать архив данных можно двумя способами:

  1. Скриптом.

  2. Командами.

Примечание

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

Подготовка к архивации

  1. Убедитесь, что на вашем диске есть около 150% свободного места от размера текущей базы данных.

Примечание

При недостатке доступного пространства воспользуйтесь скриптом compact из п.4 инструкции в соседней вкладке.

  1. Если вы используете ClickHouse, создайте в нём базу данных ClickHouse по инструкции из раздела Создание архивной базы данных в соседней вкладке.

  2. Создайте папку для архива с правами доступа для PostgreSQL. Желательно сделать это на отдельном носителе:

sudo mkdir /mnt/separate_disk/<archive_name>
sudo chmod 700 /mnt/separate_disk/<archive_name>
sudo chown postgres:postgres /mnt/separate_disk/<archive_name>

где <archive_name> – имя архивной базы данных.

Примечание

Используйте для папок и баз данных простые имена, основанные на датах архивов. Например, archive_2022.

  1. Создайте папку archives, если она отсутствует:

sudo mkdir /var/lib/staffcop/archives
  1. Создайте символическую ссылку на новую папку:

cd /var/lib/staffcop/archives
sudo ln -s /mnt/separate_disk/<archive_name> <archive_name>
  1. Создайте новое табличное пространство и скопируйте в него базу данных:

bash /usr/share/staffcop/bin/db/experimental/copy_db_to_tablespace <tablespace_name>

где <tablespace_name> – имя базы данных.

Примечание

Копирование базы 13 ГБ занимает 39 минут, копирование базы 3,3 ТБ занимает 4 часа.

Удаление устаревших данных

Запустите скрипт, который удаляет из основной базы данных шарды (месяцы), предшествующие текущему году:

bash /usr/share/staffcop/bin/db/experimental/drop_shards -d <основная бд> -n <кол-во шардов> -o ASC

где:

-d указывает на базу данных, из которой нужно удалить данные;

-n определяет количество шардов;

-o ASC удаляет шарды в порядке убывания с начала текущего года. Например, для удаления данных двух предыдущих годов укажите -n 24 -o ASC.

В результате основная база данных будет содержать только те данные, которые вы хотите оставить.

Удалите шарды текущего года из архивной базы данных:

bash /usr/share/staffcop/bin/db/experimental/drop_shards -d <архивная бд> -n <кол-во шардов> -о DESC

DESC значит, что вы удаляете данные в порядке возрастания с первого месяца текущего года. Например, если вы создаете архив в середине года, укажите -n 6 -o DESC.

Удалите данные из PostgreSQL и ClickHouse архивной и основной БД:

./bin/db/experimental/cleanup_archive_data

Применение изменений

Перезапустите Staffcop:

sudo staffcop reinit

Перенесите данные в ClickHouse из PostgreSQL:

OVERRIDE_DBNAME=<архивная бд> staffcop clickhouse reinit
OVERRIDE_DBNAME=<архивная бд> staffcop clickhouse pump

Готово! При входе в Staffcop вы увидите новый архив в списке баз данных:

../_images/db_arch_1.png

Итоги работы

Итогом правильного выполнения всех операций станут:

  • основная и архивная базы данных, доступные для выбора при входе в веб-интерфейс;

  • возможность работы ClickHouse со всеми базами данных;

  • в основной базе данных будут выполняться политики, в архивной — нет.

Дата изменения: 10.07.2024