MySQL InnoDB配置统计信息
本文档介绍如何为InnoDB表配置持久性和非持久性统计信息。
持久化统计信息在服务器重新启动时保持不变,从而使执行计划和查询性能更加稳定。持久化统计信息还提供了控制和灵活性以及这些额外的好处:
可以使用innodb_stats_auto_recalc配置选项来控制在对表进行实质性更改后是否自动更新统计信息。
可以将STATS_PERSISTENT,STATS_AUTO_RECALC和STATS_SAMPLE_PAGES子句与CREATE TABLE和ALTER TABLE语句一起使用,以配置各个表的优化程序统计信息。
可以在mysql.innodb_table_stats和mysql.innodb_index_stats表中查询优化程序统计信息数据。
可以查看mysql.innodb_table_stats和mysql.innodb_index_stats表的last_update列,以查看最后一次更新统计信息的时间。
在不需要修改数据库的情况下,可以手动修改mysql.innodb_table_stats和mysql.innodb_index_stats表,以强制执行特定的执行计划或测试备用执行计划。
默认情况下启用持久优化程序统计信息功能innodb_stats_persistent = ON。
非持久化统计信息在每次重新启动服务器和其他一些操作后清除,并在下一个表访问时重新计算。因此,在重新计算统计数据时可能会产生不同的估计值,从而导致执行计划中的不同选择和查询性能的变化。
本文档还提供了有关估计ANALYZE TABLE复杂性的信息,这在尝试实现精确统计信息和ANALYZE TABLE执行时间之间的平衡时可能很有用。
1. 配置持久化(Persistent)统计信息参数innodb_stats_persistent
参数含义:是否启用持久化统计信息功能
默认值:ON
持久化统计信息功能通过将统计信息存储到磁盘并使其在服务器重新启动期间保持不变来提高执行计划的稳定性,以便优化器更有可能每次为给定查询做出一致的选择。
当innodb_stats_persistent = ON或使用STATS_PERSISTENT = 1创建或更改单个表时,统计信息将持久保存到磁盘。innodb_stats_persistent默认启用。
要恢复使用非持久化统计信息,可以使用ALTER TABLE tbl_name STATS_PERSISTENT = 0语句修改表。
1.1 配置自动触发更新统计信息参数innodb_stats_auto_recalc
参数含义:是否自动触发更新统计信息
触发阈值:
表修改时,确认变化的数据是否超过10%,超过自动收集统计信息
表,索引统计信息是持久化存储
默认值:ON
由于自动统计信息重新计算(发生在后台)是异步,在运行影响超过10%的表的DML操作时(即使innodb_stats_auto_recalc启用后),可能不会立即重新计算统计信息 。在某些情况下,统计重新计算可能会延迟几秒钟(10s)。如果在更改表的重要部分之后立即需要最新统计信息,请运行ANALYZE TABLE以启动统计信息的同步(前台)重新计算。
如果禁用了innodb_stats_auto_recalc,请在对索引列进行实质性更改后,通过为每个适用的表发出ANALYZE TABLE语句来确保统计信息的准确性。
在表上添加索引或者添加删除索引中的列时,将自动计算索引统计信息并将其添加到innodb_index_stats表,不受innodb_stats_auto_recalc的值影响。
1.2 配置每张表的统计参数innodb_stats_persistent,innodb_stats_auto_recalc和innodb_stats_persistent_sample_pages是全局配置选项。
若要覆盖这些系统范围的设置并为各个表配置统计信息参数,可以在CREATE TABLE或ALTER TABLE语句中定义STATS_PERSISTENT,STATS_AUTO_RECALC和STATS_SAMPLE_PAGES子句。
STATS_PERSISTENT
指定是否为InnoDB表启用持久统计信息。
DEFAULT:表示表的持久统计信息设置由innodb_stats_persistent配置选项确定
1:表示启用表的持久统计信息
0:关闭此功能
STATS_AUTO_RECALC
指定是否自动重新计算InnoDB表的持久统计信息。
DEFAULT:表示表的持久统计信息设置由innodb_stats_auto_recalc配置选项确定
1:表示表中10%的数据发生更改时将重新计算统计信息
0:禁用自动重新计算此表
STATS_SAMPLE_PAGES
指定在估计索引列的基数和其他统计信息时要采样的索引页数
示例