32.3. Использование сжатия

Сжатие можно включить для отдельных табличных пространств. При этом системные отношения не сжимаются в любом случае. В настоящее время изменить характеристику сжатия табличного пространства невозможно — то есть нельзя сжать существующее табличное пространство или наоборот, сделать сжатое пространство несжатым.

Поэтому, чтобы использовать сжатие, табличное пространство нужно создать с параметром compression=true. Вы можете сделать это табличное пространство пространством по умолчанию — в данном случае оно неявно будет назначаться целевым для таблиц, создаваемых в текущем сеансе:

    postgres=# create tablespace zfs location '/var/data/cfs' with (compression=true);
    postgres=# set default_tablespace=zfs;
  

Для настройки CFS используйте параметры сжатия данных, перечисленные в Разделе 19.14. По умолчанию CFS использует для сборки мусора один рабочий процесс. Сборщик мусора проходит по каталогу табличного пространства, находит в нём файлы отображений и проверяет в них процент мусора. Если отношение неиспользуемого объёма к общему превышает значение cfs_gc_threshold, этот файл дефрагментируется. На время дефрагментации файл блокируется, в результате чего ни к какой его части нельзя обратиться. По завершении дефрагментации сборщик мусора ждёт cfs_gc_delay миллисекунд и продолжает проход по каталогу. Завершив проход, он ждёт дополнительно cfs_gc_period миллисекунд и начинает новый проход. Если для CFS настроено несколько процессов сборки мусора, они разделяют свою работу по хешу дескриптора файла (inode).

CFS предоставляет различные функции для ручного управления сборкой мусора CFS и получения информации о состоянии и активности CFS. Полный список функций вы можете найти в Подразделе 9.26.12.

Чтобы запустить сборку мусора вручную, воспользуйтесь функцией cfs_start_gc(n_workers). Эта функция возвращает число рабочих процессов, которые были фактически запущены. Заметьте, что если параметр cfs_gc_workers отличен от нуля, сборка мусора выполняется в фоне и функция cfs_start_gc ничего не делает, а просто возвращает 0.

Как и процедура автоматического сбора мусора, функция cfs_start_gc(n_workers) обрабатывает только те отношения, в которых процент мусорных блоков превосходит значение cfs_gc_threshold. Если вам нужно дефрагментировать отношение с меньшим процентом мусора, вы можете временно задать для этого параметра меньшее значение в текущем сеансе до вызова этой функции.

Эффект от сжатия таблицы можно оценить предварительно, воспользовавшись функцией cfs_estimate(relation). Эта функция считывает первые десять блоков отношения, пытается сжать их и возвращает средний коэффициент сжатия. Так, если она возвращает значение 7.8, это означает, что сжатая таблица будет занимать почти в 8 раз меньше места, чем исходная.

Функция cfs_compression_ratio(relation) позволяет проверить, насколько точной была оценка, выданная функцией cfs_estimate(relation). Она возвращает фактический коэффициент сжатия для всех сегментов сжатого отношения. Коэффициент сжатия рассчитывается как результат деления общей суммы виртуальных размеров всех сегментов отношения (числа блоков, умноженного на 8 Кбайт) на сумму физических размеров его файлов сегментов.

Как было сказано ранее, CFS всегда добавляет изменённые строки в конец сжатого файла. Поэтому физический размер файла может быть больше объёма полезных данных в нём. Другими словами, файл CFS становится фрагментированным и поэтому сборщик мусора CFS периодически проводит в нём дефрагментацию. Функции cfs_fragmentation(relation) возвращают средний коэффициент фрагментации файлов отношения, который вычисляется как результат деления суммы физических размеров файлов минус используемый объём в этих файлах на сумму физических размеров данных файлов.

Чтобы произвести дефрагментацию определённого сжатого отношения, воспользуйтесь функцией cfs_gc_relation(отношение). Она возвратит количество обработанных сегментов в данном отношении. Так же как и фоновая процедура сборки мусора, эта функция обрабатывает только те сегменты, в которых процент мусорных блоков превышает значение cfs_gc_threshold.

Для наблюдения за активностью, связанной со сборкой мусора, предлагаются следующие функции: cfs_gc_activity_scanned_files (возвращает число файлов, просканированных при сборке мусора), cfs_gc_activity_processed_files (возвращает число файлов, сжатых при сборке мусора), cfs_gc_activity_processed_pages (возвращает число страниц, перемещённых сборщиком мусора в процессе дефрагментации файлов) и cfs_gc_activity_processed_bytes (возвращает общий объём перемещённых страниц). Все эти функции подсчитывают значения с момента запуска системы.

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy