22.5.5 Сжатие соединений с X плагином
X плагин поддерживает сжатие сообщений, отправляемых по соединениям X протокола. Соединения могут быть сжаты, если сервер и клиент согласуются на взаимно поддерживаемый алгоритм сжатия. Включение сжатия уменьшает количество байт, отправляемых по сети, но добавляет к серверу и клиенту дополнительные затраты процессорного времени на сжатие и распаковку. Преимущества сжатия, следовательно, проявляются в основном при низкой пропускной способности сети, когда время передачи по сети доминирует над затратами на сжатие и распаковку, и когда результирующие наборы данных велики.
Различные MySQL клиенты по-разному реализуют поддержку сжатия соединений; обратитесь к документации своего клиента за подробностями. Например, для соединений с классическим протоколом MySQL см. Раздел 6.2.8, «Управление сжатием соединений».
Настройка сжатия подключений для плагина X
По умолчанию, плагин X поддерживает алгоритмы сжатия zstd, LZ4 и Deflate. Сжатие с помощью алгоритма Deflate выполняется с использованием библиотеки zlib, поэтому настройка алгоритма сжатия deflate_stream для подключений протокола X эквивалентна настройке zlib для подключений к классическому протоколу MySQL.
На стороне сервера вы можете запретить любой из алгоритмов сжатия, установив системную переменную mysqlx_compression_algorithms для включения только разрешённых. Имена алгоритмов zstd_stream, lz4_message и deflate_stream могут быть указаны в любой комбинации, и порядок и регистр букв не имеют значения. Если значение системной переменной пустая строка, то алгоритмы сжатия не разрешены, и подключения не сжимаются.
В следующей таблице сравниваются характеристики различных алгоритмов сжатия и показаны их приоритеты. По умолчанию сервер выбирает алгоритм с наивысшим приоритетом, разрешённый и сервером, и клиентом; клиенты могут изменить приоритеты, как описано позже. Клиенты могут использовать краткое сокращённое имя алгоритмов при их указании.
Таблица 22.1 Характеристики алгоритмов сжатия протокола X
| Алгоритм | Псевдоним | Коэффициент сжатия | Пропускная способность | Затраты ЦП | Приоритет по умолчанию |
|---|---|---|---|---|---|
zsth_stream | zstd | Высокий | Высокий | Средний | Первый |
lz4_message | lz4 | Низкий | Высокий | Самый низкий | Второй |
deflate_stream | deflate | Высокий | Низкий | Наивысший | Третий |
Набор разрешённых алгоритмов сжатия протокола X (указанных пользователем или по умолчанию) независим от набора алгоритмов сжатия, разрешённых сервером MySQL для классических подключений протокола MySQL, который задаётся системной переменной сервера protocol_compression_algorithms. Если вы не указываете системную переменную mysqlx_compression_algorithms, плагин X не использует настройки сжатия для подключений классического протокола MySQL. Вместо этого, по умолчанию разрешены все алгоритмы, показанные в таблице 22.1 «Характеристики алгоритмов сжатия протокола X». Это отличается от ситуации с контекстом TLS, где настройки сервера MySQL используются, если системные переменные плагина X не заданы, как описано в разделе 22.5.3 «Использование защищённых подключений с плагином X». Сведения о сжатии для классических подключений протокола MySQL см. в разделе 6.2.8 «Управление сжатием подключений».
На стороне клиента запрос подключения протокола X может указывать несколько параметров для управления сжатием:
Режим сжатия.
Уровень сжатия.
Список разрешённых алгоритмов сжатия в порядке приоритета.
Некоторые клиенты или коннекторы могут не поддерживать определённую функцию управления сжатием. Например, указание уровня сжатия для подключений протокола X поддерживается только MySQL Shell, а не другими клиентами MySQL или коннекторами. См. документацию по конкретным продуктам для получения подробной информации о поддерживаемых функциях и способах их использования.
Допустимые значения для режима подключения:
disabled: Подключение не сжато.preferred: Сервер и клиент договариваются о выборе алгоритма сжатия, который поддерживают оба. Если подходящий алгоритм не найден, подключение не сжимается. Это режим по умолчанию, если не указан явно.required: Переговоры об алгоритме сжатия происходят как для режимаpreferred, но если подходящий алгоритм не найден, запрос подключения завершается ошибкой.
В дополнение к согласованию алгоритма сжатия для каждого подключения, сервер и клиент могут договориться о уровне сжатия из числового диапазона, применимого к согласованному алгоритму. По мере увеличения уровня сжатия для алгоритма увеличивается и коэффициент сжатия данных, что сокращает сетевую полосу пропускания и время передачи сообщения клиенту. Однако, требуются дополнительные вычислительные ресурсы ЦП и памяти сервера для сжатия данных. Увеличение усилий для сжатия не имеет линейной зависимости от увеличения коэффициента сжатия.
Клиент может запросить определённый уровень сжатия во время переговоров с сервером о возможностях для подключения протокола X.
Уровни сжатия по умолчанию, используемые плагином X в MySQL 9.2, были выбраны на основе тестирования производительности, как представляющие хороший баланс между временем сжатия и временем пересылки по сети. Эти значения по умолчанию необязательно совпадают с значениями по умолчанию для каждой библиотеки алгоритма. Они применяются, если клиент не запрашивает уровень сжатия для алгоритма. Уровни сжатия по умолчанию первоначально устанавливаются в 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.