Использование CFS
Сжатие можно включить только на уровне табличного пространства и только в момент его создания, при этом нужно задать алгоритм сжатия. Изменить факт и алгоритм сжатия в дальнейшем нельзя. Поддерживаются библиотеки zstd, pglz, zlib, lz4. По умолчанию используется алгоритм zstd. Системные отношения никогда не сжимаются — для соответствующих сегментов не создаются файлы отображения и механизм сжатия не используется. Проверка контрольных сумм для сжатых страниц невозможна, она происходит только при чтении страницы в буферный кеш, а утилиты pg_checksums и pg_basebackup контрольные суммы страниц не проверяют.
Сжатое табличное пространство
Для создания сжатого табличного пространства выполните следующие шаги:
- Создайте директорию для нового табличного пространства:
sudo mkdir /var/lib/postgresql/ts_dir
Затем установите права доступа для пользователя postgres:sudo chown postgres: /var/lib/postgresql/ts_dir
- Создайте табличное пространство с использованием сжатия zstd:
CREATE TABLESPACE cts LOCATION '/var/lib/postgresql/ts_dir' WITH (compression=zstd);
После успешного выполнения этой команды будет создано новое табличное пространство с поддержкой сжатия. - Установите уровень сжатия 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Вернуться на главную страницу