|
61 | 61 |
|
62 | 62 | <para>&productname; хранит отношение в наборе файлов, ограничивая размер каждого 2 гигабайтами. CFS создаёт для каждого файла отдельную карту отображения страниц и производит сборку мусора в нескольких фоновых процессах. Число этих рабочих процессов и условия простоя в их работе может настраиваться администратором баз данных. Эти рабочие процессы разделяют свою работу по хешу дескриптора файла (inode), так что конфликт между ними исключён. Обрабатывается каждый файл независимо. Эти файлы могут блокироваться в момент сборки мусора, но всё отношение при этом не блокируется. Для сохранения целостности данных сборщик мусора создаёт копии исходного файла с данными и файла отображения, а когда данные полностью сохраняются на диске, новая версия файла данных атомарно переименовывается и получает исходное имя. Затем новая карта отображения копируется в файл, отображённый в память, и предыдущий файл отображения удаляется. Производя восстановление после сбоя, мы сначала проверяем, нет ли на диске резервной копии файла данных. Если такой файл существует, это означает, что исходный файл ещё не заменился и мы можем безопасно удалить копию. Если же такого файла нет, мы проверяем наличие копии файла отображения. Если эта копия находится, значит дефрагментация не была завершена из-за сбоя, и мы можем продолжить эту операцию, скопировав отображение из копии.</para>
|
63 | 63 |
|
64 |
| - <para> |
65 |
| - By default, CFS uses <application>zstd</application> compression library. |
66 |
| - For safety reasons, CFS checks that the compression algorithm used |
67 |
| - in a tablespace corresponds to this library. |
68 |
| - </para> |
| 64 | + <para>По умолчанию CFS использует библиотеку сжатия <application>zstd</application>. Из соображений безопасности CFS проверяет, соответствует ли алгоритм, используемый в табличном пространстве, этой библиотеке.</para> |
69 | 65 |
|
70 | 66 | <para>Шифрование выполняется по алгоритму RC4. Ключ шифрования получается из переменной окружения <varname>PG_CIPHER_KEY</varname>. Заметьте, что отношения системного каталога, как и дополнительные слои отношений, не шифруются.</para>
|
71 | 67 |
|
72 | 68 | </sect1>
|
73 | 69 |
|
74 | 70 | <sect1 id="cfs-usage">
|
75 |
| - <title>Using Compression/Encryption</title> |
| 71 | + <title>Использование сжатия/шифрования</title> |
76 | 72 |
|
77 | 73 | <para>Сжатие можно включить для отдельных табличных пространств. При этом системные отношения не сжимаются в любом случае. В настоящее время изменить характеристику сжатия табличного пространства невозможно — то есть нельзя сжать существующее табличное пространство или наоборот, сделать сжатое пространство несжатым.</para>
|
78 | 74 |
|
|
84 | 80 |
|
85 | 81 | <para>Шифрование на данный момент поддерживается только со сжатием: использовать шифрование без сжатия невозможно. Чтобы включить шифрование, нужно задать для параметра <varname>cfs_encryption</varname> значение true и задать ключ шифрования в переменной окружения <varname>PG_CIPHER_KEY</varname>.</para>
|
86 | 82 |
|
87 |
| - <para> |
88 |
| - To configure CFS, use data compression configuration parameters listed in <xref linkend="runtime-config-cfs"/>. |
89 |
| - By default, CFS is configured with one background worker performing garbage collection. |
90 |
| - Garbage collector traverses tablespace directory, locating map files in it and checking percent of garbage in this file. |
91 |
| - When ratio of used and allocated spaces exceeds <varname>cfs_gc_threshold</varname> threshold, this file is defragmented. |
92 |
| - The file is locked at the period of defragmentation, preventing any access to this part of relation. |
93 |
| - When defragmentation is completed, garbage collection waits <varname>cfs_gc_delay</varname> milliseconds and continue directory traversal. |
94 |
| - After the end of traversal, GC waits <varname>cfs_gc_period</varname> milliseconds and starts new GC iteration. |
95 |
| - If there are more than one GC workers, then they split work based on hash of file inode. |
96 |
| - </para> |
97 |
| - |
98 |
| - <para> |
99 |
| - CFS provides several functions to manually control CFS garbage collection |
100 |
| - and get information on CFS state and activity. For the full list of |
101 |
| - functions, see <xref linkend="functions-compression-control"/>. |
102 |
| - </para> |
103 |
| - |
104 |
| - <para> |
105 |
| - To initiate garbage collection manually, use the <varname>cfs_start_gc(n_workers)</varname> function. |
106 |
| - This function returns number of workers which are actually started. Please notice that if <varname>cfs_gc_workers</varname> |
107 |
| - parameter is non zero, then GC is performed in background and <varname>cfs_start_gc</varname> function does nothing and returns 0. |
108 |
| - </para> |
109 |
| - |
110 |
| - <para> |
111 |
| - It is possible to estimate effect of table compression using <varname>cfs_estimate(relation)</varname> function. |
112 |
| - This function takes first ten blocks of relation, tries to compress them, and returns average compress ratio. |
113 |
| - So if returned value is 7.8 then compressed table occupies about eight time less space than original table. |
114 |
| - </para> |
| 83 | + <para>Для настройки CFS используйте параметры сжатия данных, перечисленные в <xref remap="6" linkend="runtime-config-cfs"/>. По умолчанию CFS использует для сборки мусора один рабочий процесс. Сборщик мусора проходит по каталогу табличного пространства, находит в нём файлы отображений и проверяет в них процент мусора. Если отношение неиспользуемого объёма к общему превышает значение <varname>cfs_gc_threshold</varname>, этот файл дефрагментируется. На время дефрагментации файл блокируется, в результате чего ни к какой его части нельзя обратиться. По завершении дефрагментации сборщик мусора ждёт <varname>cfs_gc_delay</varname> миллисекунд и продолжает проход по каталогу. Завершив проход, он ждёт дополнительно <varname>cfs_gc_period</varname> миллисекунд и начинает новый проход. Если для CFS настроено несколько процессов сборки мусора, они разделяют свою работу по хешу дескриптора файла (inode).</para> |
| 84 | + |
| 85 | + <para>CFS предоставляет различные функции для ручного управления сборкой мусора CFS и получения информации о состоянии и активности CFS. Полный список функций вы можете найти в <xref remap="6" linkend="functions-compression-control"/>.</para> |
| 86 | + |
| 87 | + <para>Чтобы запустить сборку мусора вручную, воспользуйтесь функцией <varname>cfs_start_gc(n_workers)</varname>. Эта функция возвращает число рабочих процессов, которые были фактически запущены. Заметьте, что если параметр <varname>cfs_gc_workers</varname> отличен от нуля, сборка мусора выполняется в фоне и функция <varname>cfs_start_gc</varname> ничего не делает, а просто возвращает 0.</para> |
| 88 | + |
| 89 | + <para>Эффект от сжатия таблицы можно оценить предварительно, воспользовавшись функцией <varname>cfs_estimate(relation)</varname>. Эта функция считывает первые десять блоков отношения, пытается сжать их и возвращает средний коэффициент сжатия. Так, если она возвращает значение 7.8, это означает, что сжатая таблица будет занимать почти в 8 раз меньше места, чем исходная.</para> |
115 | 90 |
|
116 | 91 | <para>Функция <varname>cfs_compression_ratio(relation)</varname> позволяет проверить, насколько точной была оценка, выданная функцией <varname>cfs_estimate(relation)</varname>. Она возвращает фактический коэффициент сжатия для всех сегментов сжатого отношения. Коэффициент сжатия рассчитывается как результат деления общей суммы виртуальных размеров всех сегментов отношения (числа блоков, умноженного на 8 Кбайт) на сумму физических размеров его файлов сегментов.</para>
|
117 | 92 |
|
|
0 commit comments