6.2.8 连接压缩控制

与服务器的连接可以对客户端和服务器之间的流量使用压缩,以减少通过连接发送的字节数。默认情况下,连接未压缩,但如果服务器和客户端同意相互允许的压缩算法,则可以压缩。

压缩连接源自客户端,但会影响客户端和服务器端的 CPU 负载,因为两端都会执行压缩和解压缩操作。由于启用压缩会降低性能,因此其优势主要体现在网络带宽较低、网络传输时间占压缩和解压缩操作成本的主导地位且结果集较大的情况下。

本节介绍可用的压缩控制配置参数和可用于监控压缩使用情况的信息源。它适用于经典 MySQL 协议连接。

压缩控制适用于客户端程序与服务器的连接以及参与源/副本复制或组复制的服务器。压缩控制不适用于FEDERATED表的连接。在以下讨论中,“客户端连接”是指来自任何支持压缩的源的与服务器的连接的简写,除非上下文指示特定的连接类型。

笔记

与 MySQL 服务器实例的 X 协议连接支持压缩,但 X 协议连接的压缩与此处描述的经典 MySQL 协议连接的压缩独立运行,并且单独控制。有关 X 协议连接压缩的信息,请参见 第 22.5.5 节“使用 X 插件进行连接压缩”

配置连接压缩

这些配置参数可用于控制连接压缩:

允许指定压缩算法的配置参数是字符串值,并采用以下项中选择的一个或多个以逗号分隔的压缩算法名称的列表(任意顺序)(不区分大小写):

  • zlib:允许使用压缩算法的连接 zlib

  • zstd:允许使用压缩算法的连接 zstd

  • uncompressed:允许未压缩的连接。

笔记

因为uncompressed是一个可能配置或可能不配置的算法名称,所以可以将 MySQL 配置为不允许未压缩的连接。

例子:

  • 要配置服务器允许传入连接使用的压缩算法,请设置 protocol_compression_algorithms 系统变量。默认情况下,服务器允许所有可用算法。要在启动时明确配置该设置,请在服务器 my.cnf文件中使用以下行:

    <span style="background-color:#ffffff"><span style="color:#555555"><span style="background-color:#f8f8f8"><span style="color:#000000"><code class="language-ini"><span style="color:#669900">[mysqld]</span>
    <span style="color:#990055">protocol_compression_algorithms</span><span style="color:#0077aa"><span style="color:#999999">=</span>zlib,zstd,uncompressed</span></code></span></span></span></span>

    要在运行时设置并保留 protocol_compression_algorithms 系统变量为该值,请使用以下语句:

    <span style="background-color:#ffffff"><span style="color:#555555"><span style="background-color:#f8f8f8"><span style="color:#000000"><code class="language-sql"><span style="color:#0077aa">SET</span> <span style="color:#0077aa">PERSIST</span> protocol_compression_algorithms<span style="color:#a67f59">=</span><span style="color:#669900">'zlib,zstd,uncompressed'</span><span style="color:#999999">;</span></code></span></span></span></span>

    SET PERSIST为正在运行的 MySQL 实例设置一个值。它还会保存该值,使其在后续服务器重启时继续生效。要更改正在运行的 MySQL 实例的值而不使其在后续重启时继续生效,请使用关键字GLOBAL 而不是PERSIST。请参见 第 15.7.6.1 节“变量赋值的 SET 语法”

  • 为了仅允许使用 zstd压缩的传入连接,请在启动时像这样配置服务器:

    <span style="background-color:#ffffff"><span style="color:#555555"><span style="background-color:#f8f8f8"><span style="color:#000000"><code class="language-ini"><span style="color:#669900">[mysqld]</span>
    <span style="color:#990055">protocol_compression_algorithms</span><span style="color:#0077aa"><span style="color:#999999">=</span>zstd</span></code></span></span></span></span>

    或者,在运行时进行更改:

    <span style="background-color:#ffffff"><span style="color:#555555"><span style="background-color:#f8f8f8"><span style="color:#000000"><code class="language-sql"><span style="color:#0077aa">SET</span> <span style="color:#0077aa">PERSIST</span> protocol_compression_algorithms<span style="color:#a67f59">=</span><span style="color:#669900">'zstd'</span><span style="color:#999999">;</span></code></span></span></span></span>
  • 要允许mysql客户端启动 zlibuncompressed 连接,请像这样调用它:

    <span style="background-color:#ffffff"><span style="color:#555555"><span style="background-color:#f8f8f8"><span style="color:#000000"><code class="language-terminal">mysql <span style="color:#990055">--compression-algorithms</span><span style="color:#0077aa"><span style="color:#999999">=</span>zlib,uncompressed</span></code></span></span></span></span>
  • zlib要配置副本使用或连接 连接到源 zstd ,且连接的压缩级别为 7 zstd,请使用以下 CHANGE REPLICATION SOURCE TO 语句:

    <span style="background-color:#ffffff"><span style="color:#555555"><span style="background-color:#f8f8f8"><span style="color:#000000"><code class="language-sql"><span style="color:#0077aa">CHANGE</span> <span style="color:#0077aa">REPLICATION</span> <span style="color:#0077aa">SOURCE</span> <span style="color:#0077aa">TO</span>
      <span style="color:#0077aa">SOURCE_COMPRESSION_ALGORITHMS</span> <span style="color:#a67f59">=</span> <span style="color:#669900">'zlib,zstd'</span><span style="color:#999999">,</span>
      <span style="color:#0077aa">SOURCE_ZSTD_COMPRESSION_LEVEL</span> <span style="color:#a67f59">=</span> <span style="color:#990055">7</span><span style="color:#999999">;</span></code></span></span></span></span>

    假设 replica_compressed_protocol 系统变量已被禁用,原因在 配置旧式连接压缩中进行了描述。

为了成功建立连接,连接双方必须就相互允许的压缩算法达成一致。算法协商过程尝试使用 zlib,然后zstd,然后 uncompressed。如果双方找不到共同的算法,则连接尝试失败。

由于双方必须就压缩算法达成一致,并且由于uncompressed是一个不一定允许的算法值,因此不一定会出现回退到未压缩连接的情况。例如,如果服务器配置为 允许 ,zstd而客户端配置为 允许 zlib,uncompressed,则客户端根本无法连接。在这种情况下,双方没有共同的算法,因此连接尝试会失败。

允许指定 zstd压缩级别的配置参数采用 1 到 22 之间的整数值,值越大表示压缩级别越高。默认zstd压缩级别为 3。压缩级别设置对不使用zstd压缩的连接没有影响。

可配置的zstd压缩级别允许在较少网络流量和较高 CPU 负载与较多网络流量和较低 CPU 负载之间进行选择。较高的压缩级别可减少网络拥塞,但额外的 CPU 负载可能会降低服务器性能。

配置旧式连接压缩

在 MySQL 8.0.18 之前,这些配置参数可用于控制连接压缩:

  • 客户端程序支持 --compress命令行选项来指定与服务器的连接是否使用压缩。

  • 对于使用 MySQL C API 的程序,启用 MYSQL_OPT_COMPRESS该 mysql_options()函数的选项指定使用压缩来连接服务器。

  • 对于源/副本复制,启用系统变量 replica_compressed_protocol 指定对与源的副本连接使用压缩。

在每种情况下,当指定使用压缩时,如果双方都允许,则连接使用zlib压缩算法,否则回退到未压缩的连接。

从 MySQL 8.0.18 开始,刚刚描述的压缩参数成为遗留参数,因为引入了额外的压缩参数来更好地控制连接压缩,如 配置连接压缩中所述。 MySQL Shell 是一个例外,其中 --compress命令行选项保持最新,可用于请求压缩而无需选择压缩算法。 有关 MySQL Shell 连接压缩控制的信息,请参阅 使用压缩连接

旧压缩参数与新参数交互,其语义发生如下变化:

监控连接压缩

状态Compression变量是ON或,OFF指示当前连接是否使用压缩。

mysql客户端 命令\status 会显示一行信息,说明Protocol: Compressed当前连接是否启用了压缩。如果未显示该行,则表示该连接未压缩。

MySQL Shell\status命令显示 Compression:一行 DisabledEnabled以指示连接是否被压缩。

这些额外的信息源可用于监控连接压缩:

  • 要监视客户端连接使用的压缩,请使用Compression_algorithm 和Compression_level 状态变量。对于当前连接,它们的值分别表示压缩算法和压缩级别。

  • 要确定服务器配置为允许传入连接使用哪些压缩算法,请检查 protocol_compression_algorithms 系统变量。

  • 对于主/从属复制连接,可从多个源获得配置的压缩算法和压缩级别:

    • 性能模式 replication_connection_configuration 表有COMPRESSION_ALGORITHMS和 ZSTD_COMPRESSION_LEVEL列。

    • 系统mysql.slave_master_info表有 Master_compression_algorithms和 Master_zstd_compression_level 列。如果master.info文件存在,它也会包含这些值的行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值