Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 Reference Manual  /  ...  /  Configuring Non-Persistent Optimizer Statistics Parameters

17.8.10.2 配置非持久优化器统计参数

本节描述了如何配置非持久优化器统计。优化器统计不在innodb_stats_persistent=OFF或单个表创建或更改时使用STATS_PERSISTENT=0时被 persisted 到磁盘,而是存储在内存中,并且在服务器关闭时丢失。统计信息也会在某些操作和特定条件下更新。

优化器统计默认情况下被 persisted 到磁盘,通过innodb_stats_persistent配置选项启用。关于持久优化器统计的信息,请参阅第17.8.10.1节,“Configuring Persistent Optimizer Statistics Parameters”

优化器统计 Updates

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

MySQL 查询优化器使用关于键分布的估算统计信息来选择执行计划中的索引,基于索引的相对选择性。当InnoDB更新优化器统计信息时,它从每个表的索引中随机采样页面以估算索引的基数。(这是一种称为随机探测的技术。)

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

innodb_stats_transient_sample_pages 值对所有 InnoDB 表和索引的索引采样进行影响,当 innodb_stats_persistent=0 时。请注意以下可能具有重要影响的变化时期:

  • 小值,如 1 或 2 可能导致 cardinality 估计不准确。

  • 增加 innodb_stats_transient_sample_pages 值可能需要更多磁盘读取。值大于 8(例如,100)可以导致打开表或执行 SHOW TABLE STATUS 需要的时间增加。

  • 优化器可能根据不同索引选择性估计选择非常不同的查询计划。

在系统中,设置 innodb_stats_transient_sample_pages 的值,并保持该值不变。选择一个结果对所有表的 cardinality 估计都较为准确,而不需要过多 I/O 的值。由于统计信息在执行 ANALYZE TABLE 之外自动重新计算,因此不应该增加索引采样大小,然后再减少采样大小。

较小的表通常需要少于较大的表所需的索引样本。如果您的数据库中有许多大型表,考虑将innodb_stats_transient_sample_pages的值设置得更高,如果您主要使用较小的表。