pg_repack помогает уменьшить избыточность в PostgreSQL без блокировок

Приложения и игры / Desktop / pg_repack помогает уменьшить избыточность в PostgreSQL без блокировок
08.07.2024

Пользователи PostgreSQL часто сталкиваются с проблемой разрастания базы данных, что может значительно ухудшить производительность. Традиционные методы, такие как VACUUM FULL и CLUSTER, могут быть довольно разрушительными, но pg_repack предлагает онлайн-решение, которое минимизирует время простоя. Здесь мы рассмотрим установку и настройку pg_repack на PostgreSQL 14, работающем на Red Hat Enterprise Linux 9 (RHEL 9).

Что такое pg_repack?

pg_repack — это расширение PostgreSQL, предназначенное для устранения разрастания таблиц и индексов. В отличие от CLUSTER и VACUUM FULL, pg_repack работает онлайн, не требуя эксклюзивной блокировки обрабатываемых таблиц, что делает его более эффективным и менее навязчивым вариантом.

Установка

  1. Загрузка RPM-пакета
    Сначала загрузите RPM-пакет pg_repack для PostgreSQL 14 на RHEL 9:
    wget https://download.postgresql.org/pub/repos/yum/14/redhat/rhel-9-x86_64/pg_repack_14-1.5.0-1PGDG.rhel9.x86_64.rpm
  2. Установка RPM-пакета
    Затем установите загруженный RPM-пакет:
    rpm -iv pg_repack_14-1.5.0-1PGDG.rhel9.x86_64.rpm
  3. Проверка установки
    Проверьте установку, перечислив файлы, включенные в пакет:
    rpm -ql pg_repack_14-1.5.0-1PGDG.rhel9.x86_64.rpm | grep bin
    Альтернативно, используйте команду find для поиска бинарного файла pg_repack:
    find / -name pg_repack
  4. Обновление переменной окружения PATH
    Добавьте каталог bin PostgreSQL в ваш PATH:
    export PATH=$PATH:/usr/pgsql-14/bin
    Сделайте это изменение постоянным, добавив его в ваш файл ~/.bashrc:
    echo 'export PATH=$PATH:/usr/pgsql-14/bin' >> ~/.bashrc
    source ~/.bashrc

Настройка

  1. Создание расширения
    Подключитесь к вашей базе данных PostgreSQL и создайте расширение pg_repack:
    psql -c "CREATE EXTENSION pg_repack" -d employee
  2. Проверка доступности pg_repack
    Чтобы убедиться, что pg_repack доступен, перечислите бинарные файлы PostgreSQL:
    pg_re
    Вы должны увидеть pg_repack среди других бинарных файлов PostgreSQL:
    pg_receivewal   pg_recvlogical  pg_repack       pg_resetwal     pg_restore      pg_rewind
    Если вы его не видите, возможно, вы забыли выполнить команду source ~/.bashrc.

Использование

Основное использование
Чтобы упаковать конкретную базу данных (например, employee), используйте следующую команду:

pg_repack -d employee

Расширенные опции
pg_repack предлагает несколько опций для настройки своего поведения. Вот некоторые полезные из них:

  • Упаковка всех баз данных:
    pg_repack -a
  • Упаковка конкретной таблицы:
    pg_repack -t table_name -d employee
  • Упаковка таблиц в определенной схеме:
    pg_repack -s schema_name -d employee
  • Перемещение упакованных таблиц в новое пространство таблиц:
    pg_repack -T new_tablespace -d employee
  • Сортировка по определенным столбцам:
    pg_repack -o column_name -d employee

Для полного списка опций обратитесь к справке по pg_repack:

pg_repack --help

Обновлено: 08.07.2024