4.2.8 连接压缩控制

文章介绍了MySQL服务器与客户端之间的连接压缩配置,包括协议_compression_algorithms系统变量、压缩算法选择以及如何通过配置选项和命令行参数启用压缩。同时,文章提到了压缩对CPU负载的影响,以及如何监控压缩状态。监控工具包括Compression状态变量和PerformanceSchema的相关表。
摘要由CSDN通过智能技术生成

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

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

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

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

注意
到 MySQL Server 实例的 X 协议 连接支持 MySQL 8.0.19 的压缩,但 X 协议 连接的压缩独立于此处描述的 经典 MySQL 协议 连接压缩,并且是单独控制的。有关 X 协议 连接压缩的信息,请参阅 第 20.5.5 节 “使用 X 插件的连接压缩”

配置连接压缩

从 MySQL 8.0.18 开始,这些配置参数可用于控制连接压缩:

  • protocol_compression_algorithms系统变量配置服务器允许传入连接使用哪些压缩算法。
  • --compression-algorithms--zstd-compression-level命令行选项为以下客户端程序配置允许的压缩算法和 zstd 压缩级别:mysqlmysqladminmysqlbinlogmysqlcheckmysqldumpmysqlimportmysqlpumpmysqlshowmysqlslapmysqltestmysql_upgrade 。MySQL Shell 在其 8.0.20 版本中也提供了这些命令行选项。
  • mysql_options()函数的MYSQL_OPT_COMPRESSION_ALGORITHMSMYSQL_OPT_ZSTD_COMPRESSION_LEVEL选项为使用 MYSQL C API 的客户端程序配置允许的压缩算法和 zstd 压缩级别。
  • CHANGE MASTER TO语句的MASTER_COMPRESSION_ALGORITHMSMASTER_ZSTD_COMPRESSION_LEVEL选项为参与源/副本复制的副本服务器配置允许的压缩算法和 zstd 压缩级别。在 MySQL 8.0.23 中,使用语句CHANGE REPLICATION SOURCE TO和选项SOURCE_COMPRESSION_ALGORITHMSSOURCE_ZSTD_COMPRESSION_LEVEL
  • group_replication_recovery_compression_algorithmsgroup_replication_recovery_zstd_compression_level系统变量在新成员加入组并连接到供体时为组复制恢复连接配置允许的压缩算法和 zstd 压缩级别。

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

  • zlib :允许使用 zlib 压缩算法的连接。
  • zstd :允许使用 zstd 压缩算法(zstd 1.3)的连接。
  • 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。参见 第 13.7.6.1 节 “变量赋值的 SET 语法”

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

    [mysqld]
    protocol_compression_algorithms=zstd
    

    或者,在运行时更改:

    SET PERSIST protocol_compression_algorithms='zstd';
    
  • 要允许 mysql 客户端启动 zlibuncompressed 连接,请这样调用它:

    mysql --compression-algorithms=zlib,uncompressed
    
  • 要配置副本以使用 zlibzstd 连接连接到源,zstd 连接的压缩级别为 7 ,请使用CHANGE REPLICATION SOURCE TO语句(自 MySQL 8.0.23 起)或CHANGE MASTER TO语句(在 MySQL 8.0.23 之前):

    CHANGE REPLICATION SOURCE TO
    SOURCE_COMPRESSION_ALGORITHMS = 'zlib,zstd',
    SOURCE_ZSTD_COMPRESSION_LEVEL = 7;
    

    这假设replica_compressed_protocolslave_compressed_protocol系统变量已禁用,原因如下文 配置旧版连接压缩 中所述。

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

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

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

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

配置旧版连接压缩

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

  • 客户端程序支持--compress命令行,用于指定与服务器的连接使用压缩。
  • 对于使用 MySQL C API 的程序,启用mysql_options()函数的MYSQL_OPT_COMPRESS选项指定对到服务器的连接使用压缩。
  • 对于源/副本复制,启用系统变量replica_compressed_protocol(自 MySQL 8.0.26 起)或slave_compressed_protocol( MySQL 8.0.26 之前)指定为到源的副本连接使用压缩。

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

从 MySQL 8.0.18 开始,刚才描述的压缩参数,由于引入额外的压缩参数以更好地控制连接(如上文 配置连接压缩 所述),成为旧参数 。MySQL Shell 是一个例外,其中--compress命令行选项保持当前状态,可以用于请求压缩而无需选择压缩算法。有关 MySQL Shell 的连接压缩控制的信息,请参阅 使用压缩连接

旧版压缩参数与较新的参数及其语义更改如下:

  • 旧版--compress 选项的含义取决于是否指定--compression-algorithms

    • 当未指定--compression-algorithms时,–压缩是等效的 以指定客户端算法集 。zlib,uncompressed
    • 指定 --压缩算法时,--compress等价于指定相当于指定一个 zlib 的算法集,而且完整的客户端算法集是 zlib 加上由--compression-algorithms指定的算法集。 例如,使用--compress--compression-algorithms=zlib,zstd, 允许的算法集是 zlibzlib,zstd ;即 zlib,zstd 。使用--compress--compression-algorithms=zstd,uncompressed,允许的算法集是 zlibzstd,uncompressed ;即 zlib,zstd,uncompressed
  • 对于mysql_options() C API 函数,旧版MYSQL_OPT_COMPRESS选项和MYSQL_OPT_COMPRESSION_ALGORITHMS选项之间会发生相同类型的交互。

  • 如果启用了replica_compressed_protocolslave_compressed_protocol系统变量,则它优先于MASTER_COMPRESSION_ALGORITHMS ,并且如果源和副本都允许 zlib 算法,则到源的连接将使用 zlib 压缩。如果replica_compressed_protocolslave_compressed_protocol被禁用,则应用MASTER_COMPRESSION_ALGORITHMS的值。

注意
MySQL 8.0.18 之后,旧版压缩控制参数已弃用;预计它会从 MySQL 的未来版本中移除。

监视连接压缩

Compression状态变量是ONOFF表示当前连接是否使用压缩。

如果为当前连接启用了压缩,mysql 客户端\status命令显示一行Protocol: Compressed。如果不显示该行,则连接为未压缩。

从 8.0.14 开始,MySQL Shell \status命令显示一行Compression:,显示DisabledEnabled,表示连接是否被压缩。

从 MySQL 8.0.18 开始,以下附加信息源可用于监控连接压缩:

  • 要监视客户端连接使用的压缩,请使用Compression_algorithmCompression_algorithm状态变量。对于当前连接,它们的值分别表示压缩算法和压缩级别。
  • 要确定服务器配置为允许传入连接配置的是哪个压缩算法,请检查protocol_compression_algorithms系统变量。
  • 对于源/副本复制连接,配置的压缩算法和压缩级别可从多个源获得:
    • 性能模式的 protocol_compression_algorithms 表具有COMPRESSION_ALGORITHMSZSTD_COMPRESSION_LEVEL列。
    • mysql.slave_master_info系统表包含Master_compression_algorithmsMaster_zstd_compression_level列。如果master.info文件存在,它也包含这些值的行。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

独上西楼影三人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值