6.2.8 Управление сжатием соединений
Соединения с сервером могут использовать сжатие трафика между клиентом и сервером для уменьшения количества отправленных байтов по соединению. По умолчанию соединения не сжаты, но могут быть сжаты, если сервер и клиент согласятся на взаимно допустимый алгоритм сжатия.
Сжатые соединения инициализируются со стороны клиента, но влияют на нагрузку ЦП как на стороне клиента, так и на стороне сервера, поскольку обе стороны выполняют операции сжатия и распаковки. Поскольку включение сжатия снижает производительность, его преимущества проявляются в основном при низкой пропускной способности сети, когда время передачи по сети доминирует над затратами на операции сжатия и распаковки, и когда результирующие наборы данных велики.
В этом разделе описаны доступные параметры конфигурации управления сжатием и источники информации для мониторинга использования сжатия. Он применим к соединениям с классическим протоколом MySQL.
Управление сжатием применяется к соединениям с сервером клиентскими программами и серверами, участвующими в репликации source/replica или Group Replication. Управление сжатием не применяется к соединениям для FEDERATED таблиц. В последующем обсуждении “соединение клиента” — это сокращение для соединения с сервером, исходящего из любого источника, для которого поддерживается сжатие, если контекст не указывает на конкретный тип соединения.
Соединения X Protocol с экземпляром MySQL Server поддерживают сжатие, но сжатие для соединений X Protocol работает независимо от сжатия для соединений с классическим протоколом MySQL, описанного здесь, и управляется отдельно. См. Раздел 22.5.5, «Сжатие соединений с плагином X» для получения информации о сжатии соединений X Protocol.
Настройка сжатия соединения
Эти параметры конфигурации доступны для управления сжатием соединения:
Переменная системы
protocol_compression_algorithmsнастраивает алгоритмы сжатия, которые сервер разрешает для входящих соединений.Командные параметры
--compression-algorithmsи--zstd-compression-levelнастраивают разрешенные алгоритмы сжатия и уровень сжатияzstdдля этих клиентских программ: mysql, mysqladmin, mysqlbinlog, mysqlcheck, mysqldump, mysqlimport, mysqlshow, mysqlslap и mysqltest. MySQL Shell также предлагает эти командные параметры.Параметры
MYSQL_OPT_COMPRESSION_ALGORITHMSиMYSQL_OPT_ZSTD_COMPRESSION_LEVELдля функции настраивают разрешенные алгоритмы сжатия и уровень сжатияzstdдля клиентских программ, использующих MySQL C API.Параметры
SOURCE_COMPRESSION_ALGORITHMSиSOURCE_ZSTD_COMPRESSION_LEVELдля оператораCHANGE REPLICATION SOURCE TOнастраивают разрешенные алгоритмы сжатия и уровень сжатияzstdдля серверов репликации, участвующих в репликации источник/реплика.Переменные системы
group_replication_recovery_compression_algorithmsиgroup_replication_recovery_zstd_compression_levelнастраивают разрешенные алгоритмы сжатия и уровень сжатияzstdдля соединений восстановления Group Replication, когда новый член присоединяется к группе и подключается к донору.
Параметры конфигурации, позволяющие указать алгоритмы сжатия, имеют строковое значение и принимают список одного или более имен алгоритмов сжатия, разделенных запятыми в любом порядке, выбранных из следующих пунктов (регистр не учитывается):
zlib: Разрешить подключения, использующие алгоритм сжатияzlib.zstd: Разрешить подключения, использующие алгоритм сжатияzstd.uncompressed: Разрешить несжатые подключения.
Поскольку uncompressed — это имя алгоритма, которое может быть или не быть настроено, возможно настроить MySQL, чтобы не разрешать несжатые подключения.
Примеры:
-
Чтобы настроить алгоритмы сжатия, которые сервер разрешает для входящих соединений, задайте переменную системы
protocol_compression_algorithms. По умолчанию сервер разрешает все доступные алгоритмы. Чтобы явно настроить это значение при запуске, используйте эти строки в файле сервераmy.cnf:[mysqld] protocol_compression_algorithms=zlib,zstd,uncompressed
Чтобы установить и сохранить переменную системы
protocol_compression_algorithmsв этом значении во время выполнения, используйте это утверждение:SET PERSIST protocol_compression_algorithms='zlib,zstd,uncompressed';
SET PERSISTустанавливает значение для работающего экземпляра MySQL. Он также сохраняет значение, что позволит его использовать при последующих перезапусках сервера. Чтобы изменить значение для работающего экземпляра MySQL без сохранения его для последующих перезапусков, используйте ключевое словоGLOBALвместоPERSIST. См. Раздел 15.7.6.1, «Синтаксис SET для присваивания переменных». -
Чтобы разрешить только входящие подключения, использующие сжатие
zstd, настройте сервер при запуске следующим образом:[mysqld] protocol_compression_algorithms=zstd
Или, чтобы внести изменения во время выполнения:
SET PERSIST protocol_compression_algorithms='zstd';
-
Чтобы разрешить клиенту mysql инициировать подключения с
zlibилиuncompressed, вызовите его так:mysql --compression-algorithms=zlib,uncompressed
-
Чтобы настроить реплики на подключение к источнику с использованием соединений
zlibилиzstd, с уровнем сжатия 7 дляzstdсоединений, используйте операторCHANGE REPLICATION SOURCE TO:CHANGE REPLICATION SOURCE TO SOURCE_COMPRESSION_ALGORITHMS = 'zlib,zstd', SOURCE_ZSTD_COMPRESSION_LEVEL = 7;
Предполагается, что переменная системы
replica_compressed_protocolотключена, по причинам, описанным в Настройка сжатия соединений устаревшего формата.
Для успешного подключения обе стороны должны согласовать взаимно разрешенный алгоритм сжатия. Процесс согласования алгоритма пытается использовать zlib, затем zstd, затем uncompressed. Если две стороны не могут найти общий алгоритм, попытка подключения завершается неудачей.
Поскольку обе стороны должны договориться об алгоритме сжатия, и поскольку uncompressed является значением алгоритма, которое необязательно разрешено, откат к несжатому подключению необязательно происходит. Например, если сервер настроен на разрешение zstd, а клиент настроен на разрешение zlib,uncompressed, клиент вообще не сможет подключиться. В этом случае ни один алгоритм не является общим для обеих сторон, поэтому попытки подключения завершаются неудачей.
Параметры конфигурации, позволяющие задавать уровень сжатия zstd, принимают целое значение от 1 до 22, при этом большие значения указывают на повышение уровня сжатия. Уровень сжатия zstd по умолчанию равен 3. Настройка уровня сжатия не влияет на подключения, которые не используют сжатие zstd.
Настраиваемый уровень сжатия zstd позволяет выбирать между меньшим объемом сетевого трафика и большей нагрузкой на ЦП или большим объемом сетевого трафика и меньшей нагрузкой на ЦП. Более высокие уровни сжатия уменьшают сетевую нагрузку, но дополнительная нагрузка на ЦП может снизить производительность сервера.
Настройка сжатия устаревленных подключений
До MySQL 8.0.18 эти параметры конфигурации доступны для управления сжатием подключений:
Клиентские программы поддерживают опцию командной строки
--compressдля указания использования сжатия для подключения к серверу.Для программ, использующих MySQL C API, включение опции
MYSQL_OPT_COMPRESSдля функции указывает на использование сжатия для подключения к серверу.Для репликации source/replica включение системной переменной
replica_compressed_protocolуказывает на использование сжатия для реплицирующих подключений к источнику.
В каждом случае, при указании использования сжатия, подключение использует алгоритм сжатия zlib, если обе стороны его поддерживают, в противном случае используется несжатое подключение.
Начиная с MySQL 8.0.18, описанные выше параметры сжатия становятся устаревшими параметрами из-за дополнительных параметров сжатия, введенных для более точного управления сжатием подключений, которые описаны в Настройка сжатия подключений. Исключением является MySQL Shell, где опция командной строки остается актуальной и может быть использована для запроса сжатия без выбора алгоритмов сжатия. Сведения о управлении сжатием подключений в MySQL Shell см. в ...
Параметры устаревшего сжатия взаимодействуют с новыми параметрами, и их семантика меняется следующим образом:
-
Значение устаревшей опции
--compressзависит от того, указана ли опция--compression-algorithms:Когда
--compression-algorithmsне указана,--compressэквивалентно указанию набора алгоритмов сжатия на стороне клиентаzlib,uncompressed.Когда
--compression-algorithmsуказана,--compressэквивалентно указанию набора алгоритмовzlib, а полный набор алгоритмов на стороне клиента является объединениемzlibплюс алгоритмы, указанные в--compression-algorithms. Например, при использовании как--compress, так и--compression-algorithms=zlib,zstd, набор разрешенных алгоритмов — этоzlibплюсzlib,zstd; то есть,zlib,zstd. При использовании как--compress, так и--compression-algorithms=zstd,uncompressed, набор разрешенных алгоритмов — этоzlibплюсzstd,uncompressed; то есть,zlib,zstd,uncompressed.
Аналогичное взаимодействие происходит между устаревшей опцией
MYSQL_OPT_COMPRESSи опциейMYSQL_OPT_COMPRESSION_ALGORITHMSдля функции C API.Если системная переменная
replica_compressed_protocolвключена, она имеет приоритет передSOURCE_COMPRESSION_ALGORITHMS, и подключения к источнику используют алгоритм сжатияzlib, если источник и реплика поддерживают этот алгоритм. Еслиreplica_compressed_protocolвыключена, применяется значениеSOURCE_COMPRESSION_ALGORITHMS.
Мониторинг сжатия подключений
Статусная переменная Compression имеет значение ON или OFF, чтобы указать, использует ли текущее подключение сжатие.
Клиент mysql \status отображает строку, которая гласит Protocol:
Compressed, если для текущего подключения включено сжатие. Если этой строки нет, подключение несжатое.
Команда MySQL Shell \status отображает строку Compression:, которая говорит Disabled или Enabled, чтобы указать, сжато ли подключение.
Эти дополнительные источники информации доступны для мониторинга сжатия подключений:
Для мониторинга сжатия, используемого для подключений клиентов, используйте статусные переменные
Compression_algorithmиCompression_level. Для текущего подключения их значения указывают алгоритм и уровень сжатия соответственно.Чтобы определить, какие алгоритмы сжатия сервер настроен разрешать для входящих подключений, проверьте системную переменную
protocol_compression_algorithms.-
Для подключений репликации source/replica настроенные алгоритмы сжатия и уровень сжатия доступны из нескольких источников:
Таблица Performance Schema
replication_connection_configurationсодержит столбцыCOMPRESSION_ALGORITHMSиZSTD_COMPRESSION_LEVEL.Системная таблица
mysql.slave_master_infoсодержит столбцыMaster_compression_algorithmsиMaster_zstd_compression_level. Если файлmaster.infoсуществует, он также содержит строки для этих значений.
© 2025 Oracle
Licensed under the GPLv2 License.