Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

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

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

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

优化器统计信息默认情况下会持久化到磁盘上,通过innodb_stats_persistent配置选项启用。有关持久优化器统计信息的信息,请参阅第17.8.10.1节,“配置持久优化器统计参数”

优化器统计更新

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

配置采样页面数

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,可能会导致基数的不准确估算。

  • 增加 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 值。