暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

mysql 8官方文档中文版 4.2.8连接压缩控制

原创 由迪 2020-11-12
1124

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

压缩连接起源于客户端,但会影响客户端和服务器端的CPU负载,因为双方都执行压缩和解压缩操作。因为启用压缩会降低性能,所以其好处主要是在网络带宽较低时出现的,网络传输时间主导着压缩和解压缩操作的成本,结果集很大。

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

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

注意

与MySQL Server实例的X协议连接支持MySQL 8.0.19中的压缩,但是X协议连接的压缩独立于此处所述的经典MySQL协议连接的压缩而独立运行,并且是单独控制的。有关X协议连接压缩的信息,请参见 第20.5.5节“使用X插件进行连接压缩”。

配置连接压缩

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

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

  • 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 连接连接到源 ,连接的压缩级别为7 zstd,请使用以下 CHANGE MASTER TO语句:

    CHANGE MASTER TO MASTER_COMPRESSION_ALGORITHMS = 'zlib,zstd', MASTER_ZSTD_COMPRESSION_LEVEL = 7;

    假定 slave_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_COMPRESSmysql_options()功能的 选项可 指定对服务器连接的压缩方式。
  • 对于源/副本复制,启用 slave_compressed_protocol 系统变量可指定对源的副本连接使用压缩。

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

从MySQL 8.0.18开始,刚介绍的压缩参数变成了遗留参数,这是由于在配置连接压缩中介绍了为更好地控制连接压缩而引入的附加压缩参数 。MySQL Shell是一个例外,其中的 --compress命令行选项保持最新状态,可用于请求压缩而无需选择压缩算法。有关MySQL Shell的连接压缩控件的信息,请参见 使用压缩的连接

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

注意

从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_level 状态变量。对于当前连接,它们的值分别指示压缩算法和压缩级别。
  • 要确定服务器配置为允许传入连接的压缩算法,请检查 protocol_compression_algorithms 系统变量。
  • 对于源/副本复制连接,可从多个来源获得配置的压缩算法和压缩级别:
    • 性能架构 replication_connection_configuration 表具有COMPRESSION_ALGORITHMSZSTD_COMPRESSION_LEVEL列。
    • mysql.slave_master_info系统表, Master_compression_algorithmsMaster_zstd_compression_level 列。如果master.info文件存在,它也包含这些值的行。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论