首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

MySQL 8.0 InnoDB 的统计信息机制优化

这些统计信息可以由专门的后台线程刷新,也可以由用户也可以显示的调用Analyze table的命令来刷新统计信息,本文基于最新的 MySQL 8.0 来具体分析一下刷新统计信息的具体实现。...统计信息收集触发以及查看 MySQL有多种方法会触发统计信息的收集,显示的最典型就是Analyze Table 语法,并且由于在MySQL 8.0 中支持了直方图统计信息, 因此analyze table...统计信息在早期的MySQL中是不持久化的,在新版本的 MySQL 中该选项默认是持久化。当变量打开时,统计信息就会被持久化到物理表中,统计信息会更加的稳定和精确。...以下几类情况比较特殊 innodb_force_recovery 大于等于4 innodb_read_only_mode 那么,统计信息不会持久化, 而是走内存 rtree索引是不采集统计信息的 线程首先获取树的高度...Server层利用InnoDB存储引擎实现的系统表mysql.column_stats,MySQL利用JSON类型的字段来保存直方图的信息,其实现的核心代码在sql/histogram 目录下 具体的操作包括

38211
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    MySQL统计信息简介

    查询优化器决定SQL如何执行,依赖于数据库的统计信息,下面我们介绍MySQL 5.7中innodb统计信息的相关内容。 MySQL统计信息的存储分为两种,非持久化和持久化统计信息。...下的TABLES, STATISTICS3 启用--auto-rehash功能情况下,使用mysql client登录4 表第一次被打开5 距上一次更新统计信息,表1/16的数据被修改 非持久化统计信息的缺点显而易见...二、持久化统计信息 5.6.6开始,MySQL默认使用了持久化统计信息,即INNODB_STATS_PERSISTENT=ON,持久化统计信息保存在表mysql.innodb_table_stats和mysql.innodb_index_stats...持久化统计信息在以下情况会被自动更新: 1 INNODB_STATS_AUTO_RECALC=ON 情况下,表中10%的数据被修改2 增加新的索引 innodb_table_stats是表的统计信息,...innodb_index_stats是索引的统计信息,各字段含义如下: innodb_table_statsdatabase_name数据库名table_name表名last_update统计信息最后一次更新时间

    2.6K20

    MySQL 统计信息简介

    查询优化器决定SQL如何执行,依赖于数据库的统计信息,下面我们介绍MySQL 5.7中innodb统计信息的相关内容。 MySQL统计信息的存储分为两种,非持久化和持久化统计信息。...下的TABLES, STATISTICS3 启用--auto-rehash功能情况下,使用mysql client登录4 表第一次被打开5 距上一次更新统计信息,表1/16的数据被修改 非持久化统计信息的缺点显而易见...二、持久化统计信息 5.6.6开始,MySQL默认使用了持久化统计信息,即INNODB_STATS_PERSISTENT=ON,持久化统计信息保存在表mysql.innodb_table_stats和mysql.innodb_index_stats...持久化统计信息在以下情况会被自动更新: 1 INNODB_STATS_AUTO_RECALC=ON 情况下,表中10%的数据被修改2 增加新的索引 innodb_table_stats是表的统计信息,...innodb_index_stats是索引的统计信息,各字段含义如下: innodb_table_statsdatabase_name数据库名table_name表名last_update统计信息最后一次更新时间

    2.2K10

    MySQL探秘(六):InnoDB一致性非锁定读

    一致性非锁定读(consistent nonlocking read)是指InnoDB存储引擎通过多版本控制(MVVC)读取当前数据库中行数据的方式。...相反地,InnoDB会去读取行的一个快照。  上图直观地展现了InnoDB一致性非锁定读的机制。之所以称其为非锁定读,是因为不需要等待行上排他锁的释放。...一致性非锁定读是InnoDB默认的读取方式,即读取不会占用和等待行上的锁。但是并不是在每个事务隔离级别下都是采用此种方式。此外,即使都是使用一致性非锁定读,但是对于快照数据的定义也各不相同。  ...在事务隔离级别READ COMMITTED和REPEATABLE READ下,InnoDB使用一致性非锁定读。然而,对于快照数据的定义却不同。...Mysql探索(一):B-Tree索引 数据库内部存储结构探索 MySQL探秘(二):SQL语句执行过程详解 MySQL探秘(三):InnoDB的内存结构和特性 MySQL探秘(四):InnoDB

    1K20

    MySQL统计信息更新小结

    针对扫描行数,实际上MySQL在真正开始执行语句之前,并不能精确地知道满足这个条件的记录有多少条。它是通过统计信息来估算记录数的。这个统计信息就是索引的“区分度”。...MySQL使用“采样统计”的方式来维护统计信息。采样统计的时候,InnoDB默认会选择N个数据页,统计这些页面上的不同值,得到一个平均值,然后乘以这个索引的页面数,就得到了这个索引的基数。...在MySQL中,有两种存储索引统计的方式,可以通过设置参数innodb_stats_persistent的值来选择:设置为on的时候,表示统计信息会持久化存储。这时,默认的N是20,M是10。...MySQL 统计信息更新默认情况下innodb_stats_persistent=ON,优化器的统计信息会持久化保存在mysql.innodb_table_stats和mysql.innodb_index_stats...innodb_stats_auto_recalc参数默认也是开启的,当一个表数据更新超过10%的时候,会触发统计信息的更新计算。

    2.8K20

    MySQL探秘(六):InnoDB一致性非锁定读

    一致性非锁定读(consistent nonlocking read)是指InnoDB存储引擎通过多版本控制(MVVC)读取当前数据库中行数据的方式。...相反地,InnoDB会去读取行的一个快照。 ? 一致性非锁定读示意图  上图直观地展现了InnoDB一致性非锁定读的机制。之所以称其为非锁定读,是因为不需要等待行上排他锁的释放。...一致性非锁定读是InnoDB默认的读取方式,即读取不会占用和等待行上的锁。但是并不是在每个事务隔离级别下都是采用此种方式。此外,即使都是使用一致性非锁定读,但是对于快照数据的定义也各不相同。  ...在事务隔离级别READ COMMITTED和REPEATABLE READ下,InnoDB使用一致性非锁定读。然而,对于快照数据的定义却不同。...参考文章 http://mysql.taobao.org/monthly/2018/03/01/ https://liuzhengyang.github.io/2017/04/18/innodb-mvcc

    48640

    MySQL探秘(六):InnoDB一致性非锁定读

    一致性非锁定读(consistent nonlocking read)是指InnoDB存储引擎通过多版本控制(MVVC)读取当前数据库中行数据的方式。...相反地,InnoDB会去读取行的一个快照。 ? 一致性非锁定读示意图  上图直观地展现了InnoDB一致性非锁定读的机制。之所以称其为非锁定读,是因为不需要等待行上排他锁的释放。...一致性非锁定读是InnoDB默认的读取方式,即读取不会占用和等待行上的锁。但是并不是在每个事务隔离级别下都是采用此种方式。此外,即使都是使用一致性非锁定读,但是对于快照数据的定义也各不相同。  ...在事务隔离级别READ COMMITTED和REPEATABLE READ下,InnoDB使用一致性非锁定读。然而,对于快照数据的定义却不同。...参考文章 http://mysql.taobao.org/monthly/2018/03/01/ https://liuzhengyang.github.io/2017/04/18/innodb-mvcc

    42710

    MySQL字段信息统计机制场景

    表信息更新的基本逻辑 默认情况下,MySQL 会高效地从 系统表 mysql.index_stats 和 mysql.table_stats 中检索这些列的缓存值,而不是直接从存储引擎中获取统计信息。...如果缓存的统计信息不可用或已过期,MySQL 将从存储引擎中检索最新的统计信息,并将其统计信息更新并缓存在 mysql.index_stats 和 mysql.table_stats 字典表中。...值得注意的是:MySQL 重新启动或第一次打开 mysql.index_stats 和 mysql.table_stats 表不会自动更新缓存的统计信息。...在以下情况中,查询统计信息列不会在 mysql.index_stats 和 mysql.table_stats 字典表中存储或更新统计信息: 缓存的统计信息尚未过期时。...从存储引擎中检索并由一个会话缓存的统计信息可用于其他会话。 2测试 本文以 MySQL 8.0.30 为例,进行分析。

    37330

    MySQL案例:8.0统计信息不准确?

    ,还是相对准确的,因为在默认情况下,数据变化量超过10%,就会触发统计信息更新 mysql> select count(*) from test; +----------+ | count(*) | +...其实是MySQL 8.0为了提高information_schema的查询效率,将视图tables和statistics里面的统计信息缓存起来,缓存过期时间由参数information_schema_stats_expiry...那么统计信息不准确,会带来哪些影响呢?...之前文章也提过,MySQL 8.0是将元数据信息存放在mysql库下的数据字典表里,information_schema库只是提供相对方便的视图供用户查询,所以优化器在选择执行计划时,会从数据字典表中获取统计信息...总结 MySQL 8.0为了提高information_schema的查询效率,会将视图tables和statistics里面的统计信息缓存起来,缓存过期时间由参数information_schema_stats_expiry

    2.5K4130

    MySQL 8.0 中统计信息直方图的尝试

    中统计信息的创建,不同于MSSQL,MySQL统计信息不依赖于索引,需要单独创建,语法如下 --创建字段上的统计直方图信息 ANALYZE TABLE test UPDATE HISTOGRAM ON...写过一点MySQL统计信息的,不过是在MySQL5.7下面,还没有直方图的概念https://www.linuxidc.com/Linux/2018-08/153704.htm 触发统计信息更新的变量还是...set global innodb_stats_on_metadata = 1;但是经测试,统计信息的直方图并没有因此而更新。...innodb_stats_on_metadata在MySQL5.7中影响到的是MySQL的索引上的统计信息,而这里纯粹是统计信息的直方图(MySQL 8.0中直方图跟索引没有必然的关系)。...MySQL 8.0中会不会把统计信息和索引关联起来,或者根据需要自动创建统计信息,如果统计信息做不到自动更新,基本上可以认为是残废的统计信息了。

    70330

    MySQL中的统计信息相关参数介绍

    统计信息对于SQL的执行时间有重要的影响,统计信息的不准确会导致SQL的执行计划不准确,从而致使SQL执行时间变慢,Oracle DBA非常了解统计信息的收集规则,同样在MySQL中也有相关的参数去控制统计信息...相关参数 innodb_stats_auto_recalc 控制innodb是否自动收集统计信息,默认是打开的。当表中数据变化超过%10时候,就会重新计算统计信息。...innodb_stats_persistent_sample_pages 控制收集统计信息时采样的page数量,默认是20。...推荐配置 innodb_stats_method 统计信息的自动收集在高并发情况下可能会带来性能的抖动,建议将此参数关闭。...innodb_stats_persistent 建议打开此参数将统计信息持久化到磁盘上 。

    1.5K110

    MYSQL 8 统计信息持久化 与 null

    在任何数据库中统计信息是帮助数据库查询中走更适合的查询路径的基础,MYSQL 8 中持久化的统计信息怎么做,怎么能持久化后提高执行计划的稳定性。...默认的情况下,这个参数是打开的 show variables like 'innodb_stats_persistent'; 实际当中统计信息是存在于mysql.innodb_table_stats...and mysql.innodb_index_stats 这两个表中的 具体每个表变化多少数据量才开始进行统计,要看 innodb_stats_auto_recalc 这个参数,默认打开,并且一个表中的...NULL 值在统计分析中的方式 innodb_stats_method mysql 提供了3种方式 nulls_equal 所有NULL索引值都被认为是相等的 nulls_unequal 值被认为是不等的...= null , no , null 在数据库里面到底是一个什么角色,并且要不要被统计到统计信息里面来,都是应该考虑的问题,而MYSQL 将这个问题让用户来选择,实际上着也说明MYSQL 本身也对这个问题没有自己的解决方案

    78120
    领券