Documentation Home
MySQL 5.7 发行说明  /  MySQL 5.7.33 的变化(2021-01-18,正式发布)

MySQL 5.7.33 的变化(2021-01-18,正式发布)

优化器注释

  • MySQL 尝试对任何具有子句的查询 ORDER BY使用 有序索引,覆盖优化器做出的任何其他选择,只要它确定这会导致更快的执行。由于进行此确定的算法对数据分布和其他条件做出了某些假设,因此它可能并不总是完全正确,并且在某些情况下,为此类查询选择不同的优化可能会提供更好的性能。为了处理此类事件,现在可以通过将 系统变量的 标志 设置为来禁用此优化。 GROUP BYLIMIToptimizer_switchprefer_ordering_indexoff

    有关此标志及其使用示例的更多信息,请参阅可切换优化LIMIT 查询优化

    感谢 Jeremy Cole 的贡献。(缺陷号 31686878)

    参考资料:另请参阅:Bug #97001、Bug #30348211。

安全说明

添加或更改的功能

  • --all-databases当使用该选项 调用时 , mysqldump现在首先转储 mysql数据库,因此当重新加载转储文件时 DEFINER,其他对象的子句中命名的任何帐户都已经创建。(缺陷号 32141046)

修正错误

  • InnoDB: 全文搜索同步线程试图从索引缓存中读取先前释放的单词。(缺陷号 31310404)

  • InnoDB: 调用numa_all_nodes_ptrnuma_get_mems_allowed()函数取代。感谢 Daniel Black 的贡献。(漏洞 #24693086,漏洞 #83044)

  • Replication:设置 系统变量时 transaction_write_set_extraction=XXHASH64 ,这是 MySQL 8.0 中的默认设置,也是 Group Replication 的要求,事务的写入集合以前没有大小上限。现在,对于标准源到副本的复制,写入集的数字限制由 binlog_transaction_dependency_history_size 被应用,之后写集信息被丢弃但事务继续执行。因为写集信息随后无法用于依赖计算,事务被标记为非并发,并在副本上顺序处理。对于Group Replication,从事务中提取写入的过程需要对所有组成员进行冲突检测和认证,因此如果要完成事务,则不能丢弃写入集信息。应用设置的字节限制 group_replication_transaction_size_limit 而不是数字限制,如果超过限制,事务将无法执行。(缺陷号 32019842)

  • 复制: 随着从半同步源服务器复制的副本数量增加,锁定争用可能导致性能下降。插件使用的锁定机制已更改为尽可能使用共享锁,避免不必要的锁获取并限制回调。可以通过启用以下系统变量来实现新行为:

    • replication_sender_observe_commit_only=1 限制回调。

    • replication_optimize_for_static_plugin_config=1 添加共享锁并避免不必要的锁获取。如果要卸载插件,必须禁用此系统变量。

    这两个系统变量都可以在安装半同步复制插件之前或之后启用,并且可以在复制运行时启用。半同步复制源服务器也可以从启用这些系统变量中获得性能优势,因为它们使用与副本相同的锁定机制。(缺陷号 30519928)

  • 复制: 在保留提交顺序的多线程副本上,工作线程必须等待中继日志中较早发生的所有事务在提交自己的事务之前提交。如果由于等待提交顺序较晚的事务的线程锁定了提交顺序较早的事务所需的行而发生死锁,则死锁检测算法会向等待线程发出信号以回滚其事务。以前,如果事务重试不可用,则回滚其事务的工作线程将立即退出,而不会向提交顺序中的其他工作线程发出信号,这可能会停止复制。这种情况下的工作线程现在等待轮到它调用回滚函数,这意味着它正确地向其他线程发出信号。(漏洞 #26883680,漏洞 #87796)

  • 复制: GTID 仅在服务器实例上可用,最多为带符号的 64 位整数的非负值数(2 的 63 次方减 1)。如果将 的值设置为 gtid_purged接近此限制的数字,则后续提交可能会导致服务器用完 GTID 并采取 指定的操作 binlog_error_action。从 MySQL 8.0.23 开始,当服务器实例接近限制时会发出警告消息。(缺陷号 26035544)

  • Microsoft Windows: 在 Windows 上,将 MySQL 服务器作为服务运行会导致共享内存连接失败。(缺陷号 32009251)

  • MRR 迭代器通常NULL 通过检查过滤掉键impossible_null_ref(),但是当连接条件包含IS NULL谓词或使用 NULL-safe equals operator ≪=>时,优化器必须检查连接条件是否使用谓词项作为其连接条件的一部分,而不是HA_MRR_NO_NULL_ENDPOINTS在这种情况下设置内部标志 。现在我们使用位掩码检查键中的每一列是否拒绝NULL,在这种情况下我们可以设置 HA_MRR_NO_NULL_ENDPOINTS而无需进一步检查。(缺陷号 32774281)

  • 服务器没有 WHERE_CONDITION正确处理优化的所有情况。(缺陷号 31905199)

  • 对于支持主键扩展的引擎,当总键长度超过MAX_KEY_LENGTH或键部分数量超过 MAX_REF_PARTS时,主键中不符合这些限制的关键部分不会添加到副键中,但主键中的关键部分会被添加到副键中。无条件地标记为辅助键的一部分。

    这导致了二级键被视为覆盖索引的情况,这意味着有时会选择错误的访问方法。

    这是通过修改将主键的关键部分添加到辅助键的方式来解决的,以便清除那些不符合前面提到的限制的内容。(缺陷号 31617858)

  • 某些表的权限 INFORMATION_SCHEMA检查不正确。(缺陷号 31553323)

  • 在某些情况下,服务器没有正确处理多重嵌套子查询。(缺陷号 31472704)

  • skip_name_resolve如果启用了系统变量, 某些帐户可能会导致服务器启动失败 。(缺陷号 31018510)

  • 如果通信数据包包含错误数据,客户端程序可能会意外退出。(缺陷号 30890850)

  • 客户端库中的缓冲区溢出已修复。(缺陷号 30885987)

  • mysql_config_editor在密码值中被错误地视为 #注释字符。(缺陷 #29861961,缺陷 #95597)