innodb_stats_persistent决定两种收集方式
默认为on,指定InnoDB索引统计信息是否保存到磁盘。如果为off,那么在服务器重启或者一些其他操作时会清空之前的统计信息,其实就是清空mysql.innodb_table_stats和mysql.innodb_index_stats表数据。当下一次表访问时再次重新计算,这可能会导致查询执行计划发生变化。
可以在创建表之前在全局级别设置innodb_stats_persistent,或者使用CREATE TABLE和ALTER TABLE语句的STATS_PERSISTENT子句覆盖系统范围的设置并配置各个表的持久性统计信息。
优化器统计信息内容记录在mysql.innodb_table_stats 和 mysql.innodb_index_stats,其中last_update列记录了统计信息最近一次更新时间,
可以手动修改mysql.innodb_table_stats和mysql.innodb_index_stats表来强制执行特定的查询优化计划,或者在不修改数据库的情况下测试替代计划。
当innodb_stats_persistent启用的情况下,以下参数才有效
innodb_stats_persistent_sample_pagesinnodb_stats_auto_recalc
innodb_stats_auto_recalc
默认为on,InnoDB在表中的数据发生较大变化后自动重新计算持久性统计信息。阈值是表中的行的10%。此设置适用于启用innodb_stats_persistent选项时创建的表。
自动统计信息重新计算也可以通过在CREATE TABLE或ALTER TABLE语句中指定STATS_PERSISTENT = 1进行配置。