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

Сжатие можно включить только на уровне табличного пространства и только в момент его создания, при этом нужно задать алгоритм сжатия. Изменить факт и алгоритм сжатия в дальнейшем нельзя. Поддерживаются библиотеки zstd, pglz, zlib, lz4. По умолчанию используется алгоритм zstd. Системные отношения никогда не сжимаются — для соответствующих сегментов не создаются файлы отображения и механизм сжатия не используется. Проверка контрольных сумм для сжатых страниц невозможна, она происходит только при чтении страницы в буферный кеш, а утилиты pg_checksums и pg_basebackup контрольные суммы страниц не проверяют.

Сжатое табличное пространство

Для создания сжатого табличного пространства выполните следующие шаги:

  1. Создайте директорию для нового табличного пространства:
    sudo mkdir /var/lib/postgresql/ts_dir
    Затем установите права доступа для пользователя postgres:
    sudo chown postgres: /var/lib/postgresql/ts_dir
  2. Создайте табличное пространство с использованием сжатия zstd:
    CREATE TABLESPACE cts LOCATION '/var/lib/postgresql/ts_dir' WITH (compression=zstd);
    После успешного выполнения этой команды будет создано новое табличное пространство с поддержкой сжатия.
  3. Установите уровень сжатия CFS равным 14:
    ALTER SYSTEM SET cfs_level=14;
    Затем перезагрузите конфигурацию:
    SELECT pg_reload_conf();
\db+ cts
                                             List of tablespaces
 Name |  Owner  |          Location          | Access privileges |      Options       |  Size   | Description 
------+---------+----------------------------+-------------------+--------------------+---------+-------------
 cts  | student | /var/lib/postgresql/ts_dir |                   | {compression=zstd} | 4 bytes | 
(1 row)

База данных

После создания сжатого табличного пространства создаем базу данных:

=> CREATE DATABASE cfs TEMPLATE template0 TABLESPACE cts;
CREATE DATABASE
=> \c cfs
You are now connected to database "cfs" as user "student".
=> CREATE SCHEMA bookings;
CREATE SCHEMA

Затем загружаем определение таблицы и её строки в новую базу:

student$ /opt/pgpro/ent-13/bin/pg_dump -d demo --table=tickets --section=pre-data --section=data | psql -d cfs
SET
SET
SET
SET
SET
SET
 set_config 
------------
 
(1 row)

SET
SET
SET
SET
SET
SET
SET
CREATE TABLE
ALTER TABLE
COMMENT
COMMENT
COMMENT
COMMENT
COMMENT
COMMENT
COPY 366733

Проверяем размер таблицы и степень сжатия:

=> ANALYZE [bookings.tickets](bookings.tickets);
ANALYZE
=> SELECT relname, relpages,
  pg_size_pretty(relpages*8192::numeric) original,
  pg_size_pretty(pg_table_size(oid)) compressed,
  cfs_compression_ratio(oid) ratio
FROM pg_class
WHERE relname = 'tickets'
;
 relname | relpages | original | compressed |       ratio        
---------+----------+----------+------------+--------------------
 tickets |     6159 | 48 MB    | 23 MB      | [2.0975552973214233](2.0975552973214233)
(1 row)

Удаление табличного пространства

Чтобы удалить табличное пространство и связанные с ним объекты, выполните следующие команды: создания

=> \c student
You are now connected to database "student" as user "student".
=> DROP DATABASE cfs;
DROP DATABASE
=> DROP TABLESPACE cts;
DROP TABLESPACE
student$ sudo rm -rf /var/lib/postgresql/ts_dir
Вернуться на главную страницу