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

【ACDU 翻译】 MySQL 15.8.10.2 配置非持久优化器统计参数

原创 由迪 2022-04-19
1093

本节介绍如何配置非持久优化器统计信息。innodb_stats_persistent=OFF优化器统计信息不会在创建或更改单个表 时保存到磁盘 STATS_PERSISTENT=0。相反,统计信息存储在内存中,并在服务器关闭时丢失。统计数据也会通过某些操作和在某些条件下定期更新。

优化器统计信息默认保存到磁盘,由innodb_stats_persistent 配置选项启用。有关持久优化器统计信息的信息,请参阅第 15.8.10.1 节,“配置持久优化器统计参数”

优化器统计更新

非持久优化器统计信息在以下情况下更新:

配置采样页数

MySQL 查询优化器使用有关键分布的估计 统计信息来根据索引的相对选择性为执行计划 选择索引。更新优化器统计信息时InnoDB,它会从表上的每个索引中随机抽取页面以估计索引的 基数。(这种技术被称为 随机潜水。)

为了让您控制统计估计的质量(从而为查询优化器提供更好的信息),您可以使用参数更改采样页面的数量 innodb_stats_transient_sample_pages。默认的采样页数为 8,这可能不足以产生准确的估计,从而导致查询优化器的索引选择不佳。这种技术对于大型表和 连接中使用的表尤其重要。对此类表进行不必要 的全表扫描可能是一个重大的性能问题。有关调整此类查询的提示,请参阅 第 8.2.1.23 节,“避免全表扫描”innodb_stats_transient_sample_pages 是一个可以在运行时设置的全局参数。

时的值 会影响所有 表和索引 innodb_stats_transient_sample_pages 的索引采样。当您更改索引样本大小时,请注意以下潜在的重大影响: InnoDBinnodb_stats_persistent=0

  • 像 1 或 2 这样的小值可能会导致对基数的估计不准确。
  • 增加该 innodb_stats_transient_sample_pages 值可能需要更多磁盘读取。远大于 8 的值(例如 100)可能会导致打开表或执行SHOW TABLE STATUS.
  • 优化器可能会根据对索引选择性的不同估计选择非常不同的查询计划。

无论哪种值 innodb_stats_transient_sample_pages 最适合系统,设置选项并将其保留为该值。选择一个值,该值可以对数据库中的所有表进行合理准确的估计,而不需要过多的 I/O。由于统计信息会在执行 之外的不同时间自动重新计算 ,因此增加索引样本大小、运行、然后再次减小样本大小 ANALYZE TABLE是没有意义的 。ANALYZE TABLE

较小的表通常比较大的表需要更少的索引样本。如果您的数据库有许多大表,请考虑使用 innodb_stats_transient_sample_pages 比大多数小表更高的值。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

墨天轮福利君
暂无图片
3年前
评论
暂无图片 0
您好,您的文章已入选墨力原创作者计划合格奖,10墨值奖励已经到账请查收! ❤️我们还会实时派发您的流量收益。
3年前
暂无图片 点赞
评论