Spec-Zone.ru › MySQL 8.4

22.5.5 Сжатие соединений с X плагином

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

Примечание

Различные MySQL клиенты по-разному реализуют поддержку сжатия соединений; обратитесь к документации своего клиента за подробностями. Например, для соединений с классическим протоколом MySQL см. Раздел 6.2.8, «Управление сжатием соединений».

  • Настройка сжатия соединений для X плагина

  • Характеристики сжатых соединений для X плагина

  • Мониторинг сжатия соединений для X плагина

Настройка сжатия подключений для X плагина

По умолчанию X плагин поддерживает алгоритмы сжатия zstd, LZ4 и Deflate. Сжатие с помощью алгоритма Deflate выполняется с использованием библиотеки zlib, поэтому настройка алгоритма сжатия deflate_stream для подключений X Протокола эквивалентна настройке zlib для подключений классического MySQL протокола.

На стороне сервера вы можете запретить любой из алгоритмов сжатия, установив системную переменную mysqlx_compression_algorithms так, чтобы включались только разрешённые. Имена алгоритмов zstd_stream, lz4_message и deflate_stream могут быть указаны в любой комбинации, и порядок и регистр букв не важны. Если значение системной переменной является пустой строкой, никакие алгоритмы сжатия не разрешены, и подключения не сжимаются.

В следующей таблице сравниваются характеристики различных алгоритмов сжатия и показаны их назначенные приоритеты. По умолчанию сервер выбирает алгоритм с наивысшим приоритетом, разрешённый как сервером, так и клиентом; клиенты могут изменять приоритеты, как описано ниже. Клиенты могут использовать сокращённые имена алгоритмов при их указании.

Таблица 22.1 Характеристики алгоритмов сжатия X Протокола

Таблица 22.1 Характеристики алгоритмов сжатия X Протокола
Алгоритм Псевдоним Коэффициент сжатия Пропускная способность Затраты процессора Приоритет по умолчанию
zsth_stream zstd Высокий Высокий Средний Первый
lz4_message lz4 Низкий Высокий Самый низкий Второй
deflate_stream deflate Высокий Низкий Самый высокий Третий

Набор разрешённых алгоритмов сжатия X Протокола (будь то заданные пользователем или по умолчанию) независим от набора алгоритмов сжатия, разрешённых MySQL Server для подключений классического MySQL протокола, который определяется системной переменной сервера protocol_compression_algorithms. Если вы не указываете системную переменную mysqlx_compression_algorithms, X плагин не использует настройки сжатия для подключений классического MySQL протокола. Вместо этого его значение по умолчанию — разрешать все алгоритмы, показанные в таблице 22.1 «Характеристики алгоритмов сжатия X Протокола». Это отличается от ситуации с контекстом TLS, где настройки MySQL Server используются, если системные переменные X плагина не заданы, как описано в разделе 22.5.3 «Использование защищённых подключений с X плагином». Сведения о сжатии для подключений классического MySQL протокола см. в разделе 6.2.8 «Управление сжатием подключений».

На стороне клиента запрос подключения X Протокола может указать несколько параметров для управления сжатием:

  • Режим сжатия.

  • Уровень сжатия.

  • Список разрешённых алгоритмов сжатия в порядке приоритета.

Примечание

Некоторые клиенты или Коннекторы могут не поддерживать определённую функцию управления сжатием. Например, указание уровня сжатия для подключений X Протокола поддерживается только MySQL Shell, а не другими клиентами MySQL или Коннекторами. Обратитесь к документации конкретных продуктов для получения подробностей о поддерживаемых функциях и способах их использования.

Режим подключения имеет следующие разрешённые значения:

  • disabled: Подключение не сжато.

  • preferred: Сервер и клиент договариваются о выборе алгоритма сжатия, который разрешён для обоих. Если доступен ни один общий алгоритм, подключение не сжимается. Это режим по умолчанию, если он не указан явно.

  • required: Переговоры об алгоритме сжатия происходят как в режиме preferred, но если доступен ни один общий алгоритм, запрос подключения завершается с ошибкой.

Помимо согласования алгоритма сжатия для каждого подключения, сервер и клиент могут договориться о уровне сжатия из числового диапазона, применимого к согласованному алгоритму. По мере повышения уровня сжатия алгоритма увеличивается коэффициент сжатия данных, что уменьшает требуемую пропускную способность сети и время передачи сообщения клиенту. Однако, усилия, необходимые для сжатия данных, также увеличиваются, занимая время и ресурсы процессора, памяти на сервере. Увеличение усилий по сжатию не имеет линейной зависимости от увеличения коэффициента сжатия.

Клиент может запросить конкретный уровень сжатия во время переговоров о возможностях с сервером для подключения X Протокола.

Значения по умолчанию для уровней сжатия, используемые X плагином в MySQL 8.4, были выбраны на основе тестирования производительности и представляют собой хорошее компромиссное решение между временем сжатия и временем пересылки по сети. Эти значения по умолчанию не обязательно совпадают с значениями по умолчанию библиотеки для каждого алгоритма. Они применяются, если клиент не запрашивает уровень сжатия для алгоритма. Значения по умолчанию для уровней сжатия изначально установлены на 3 для zstd, 2 для LZ4 и 3 для Deflate. Вы можете настроить эти значения, используя системные переменные mysqlx_zstd_default_compression_level, mysqlx_lz4_default_compression_level и mysqlx_deflate_default_compression_level.

Для предотвращения чрезмерного потребления ресурсов сервером X плагин устанавливает максимальный уровень сжатия, разрешённый сервером для каждого алгоритма. Если клиент запрашивает уровень сжатия, превышающий это значение, сервер использует свой максимальный разрешённый уровень сжатия (запросы уровней сжатия клиентом поддерживаются только MySQL Shell). Максимальные уровни сжатия изначально установлены на 11 для zstd, 8 для LZ4 и 5 для Deflate. Вы можете настроить эти значения, используя системные переменные mysqlx_zstd_max_client_compression_level, mysqlx_lz4_max_client_compression_level и mysqlx_deflate_max_client_compression_level.

Если сервер и клиент разрешают более одного алгоритма, порядок приоритетов по умолчанию для выбора алгоритма во время переговоров показан в таблице 22.1 «Характеристики алгоритмов сжатия X Протокола». Для клиентов, которые поддерживают указание алгоритмов сжатия, запрос подключения может включать список разрешённых клиентом алгоритмов, указанных с использованием имени алгоритма или его псевдонима. Порядок этих алгоритмов в списке принимается сервером как порядок приоритета. В этом случае используемым алгоритмом является первый из алгоритмов в списке клиента, который также разрешён на стороне сервера. Однако опция алгоритмов сжатия зависит от режима сжатия:

  • Если режим сжатия disabled, опция алгоритмов сжатия игнорируется.

  • Если режим сжатия preferred, но ни один разрешенный алгоритм со стороны клиента не разрешен на стороне сервера, подключение не сжимается.

  • Если режим сжатия required, но ни один разрешенный алгоритм со стороны клиента не разрешен на стороне сервера, возникает ошибка.

Для мониторинга последствий сжатия сообщений используйте системные переменные X плагина, описанные в разделе мониторинга сжатия подключений для X плагина. Вы можете использовать эти переменные состояния для расчёта преимущества сжатия сообщений с текущими настройками и использовать эту информацию для настройки настроек.

Характеристики сжатия подключений для плагина X

Сжатие подключений протокола X работает с указанными ниже особенностями и ограничениями:

  • Суффиксы _stream и _message в названиях алгоритмов относятся к двум различным режимам работы: в потоковом режиме все сообщения протокола X в одном подключении сжимаются в непрерывный поток и должны быть распакованы таким же образом — в порядке их сжатия и без пропуска каких-либо сообщений. В режиме сообщений каждое сообщение сжимается индивидуально и независимо, и не обязательно должно быть распаковано в том порядке, в котором оно было сжато. Кроме того, в режиме сообщений не требуется распаковка всех сжатых сообщений.

  • Сжатие не применяется к сообщениям, которые отправляются до успешной аутентификации.

  • Сжатие не применяется к сообщениям управления потоком, таким как Mysqlx.Ok, Mysqlx.Error и Mysqlx.Sql.StmtExecuteOk сообщения.

  • Все остальные сообщения протокола X могут быть сжаты, если сервер и клиент согласуются об алгоритме сжатия, разрешённом для обоих, во время переговоров о возможностях. Если клиент не запрашивает сжатие на этом этапе, ни клиент, ни сервер не применяют сжатие к сообщениям.

  • Когда сообщения, отправляемые по подключениям протокола X, сжимаются, по-прежнему применяется ограничение, заданное системной переменной mysqlx_max_allowed_packet. Размер сетевого пакета должен быть меньше этого значения после распаковки полезной нагрузки сообщения. Если это ограничение превышено, плагин X возвращает ошибку распаковки и закрывает подключение.

  • Следующие моменты относятся к запросам уровня сжатия клиентами, которые поддерживаются только MySQL Shell:

    • Уровни сжатия должны быть указаны клиентом как целое число. Если предоставлен любой другой тип значения, подключение закрывается с ошибкой.

    • Если клиент указывает алгоритм, но не уровень сжатия, сервер использует свой уровень сжатия по умолчанию для алгоритма.

    • Если клиент запрашивает уровень сжатия алгоритма, превышающий максимальный разрешённый сервером уровень, сервер использует максимальный разрешённый уровень.

    • Если клиент запрашивает уровень сжатия алгоритма, меньший минимального разрешённого сервером уровня, сервер использует минимальный разрешённый уровень.

Мониторинг сжатия подключений для плагина X

Вы можете отслеживать эффекты сжатия сообщений, используя переменные состояния плагина X. При использовании сжатия сообщений сессионная переменная состояния Mysqlx_compression_algorithm показывает, какой алгоритм сжатия используется для текущего подключения протокола X, а Mysqlx_compression_level показывает выбранный уровень сжатия.

Переменные состояния плагина X могут быть использованы для расчета эффективности выбранных алгоритмов сжатия (коэффициент сжатия данных) и общего эффекта использования сжатия сообщений. Используйте значение переменных состояния в сессии для следующих расчётов, чтобы увидеть пользу сжатия сообщений для конкретной сессии с известным алгоритмом сжатия. Или используйте глобальное значение переменных состояния, чтобы проверить общую пользу сжатия сообщений для сервера во всех сессиях с использованием подключений протокола X, включая все используемые алгоритмы сжатия для этих сессий и все сессии, которые не использовали сжатие сообщений. Затем вы можете настроить сжатие сообщений, скорректировав разрешённые алгоритмы сжатия, максимальный уровень сжатия и уровень сжатия по умолчанию, как описано в Настройка сжатия подключений для плагина X.

При использовании сжатия сообщений переменная состояния Mysqlx_bytes_sent показывает общее количество байтов, отправленных сервером, включая сжатые полезные нагрузки сообщений, измеренные после сжатия, любые элементы в сжатых сообщениях, которые не были сжаты, такие как заголовки протокола X, и любые несжатые сообщения. Переменная состояния Mysqlx_bytes_sent_compressed_payload показывает общее количество байтов, отправленных в виде сжатых полезных нагрузок сообщений, измеренных после сжатия, а переменная состояния Mysqlx_bytes_sent_uncompressed_frame показывает общее количество байтов для тех же полезных нагрузок сообщений, но измеренных до сжатия. Таким образом, коэффициент сжатия, показывающий эффективность алгоритма сжатия, может быть рассчитан по следующему выражению:

mysqlx_bytes_sent_uncompressed_frame / mysqlx_bytes_sent_compressed_payload

Эффективность сжатия для сообщений протокола X, отправленных сервером, может быть рассчитана по следующему выражению:

(mysqlx_bytes_sent - mysqlx_bytes_sent_compressed_payload + mysqlx_bytes_sent_uncompressed_frame) / mysqlx_bytes_sent

Для сообщений, полученных сервером от клиентов, переменная состояния Mysqlx_bytes_received_compressed_payload показывает общее количество байтов, полученных в виде сжатых полезных нагрузок сообщений, измеренных до распаковки, а переменная состояния Mysqlx_bytes_received_uncompressed_frame показывает общее количество байтов для тех же полезных нагрузок сообщений, но измеренных после распаковки. Переменная состояния Mysqlx_bytes_received включает сжатые полезные нагрузки сообщений, измеренные до распаковки, любые несжатые элементы в сжатых сообщениях и любые несжатые сообщения.

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-8.4-en/x-plugin-connection-compression.html

Spec-Zone.ru

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