Spec-Zone.ru › MySQL 8.4

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.
https://docs.oracle.com/cd/E17952_01/mysql-8.4-en/connection-compression-control.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API