第 13 章 兵马未动,粮草先行——InnoDB 统计数据是如何收集的

news2024/9/22 10:26:05

表的统计数据:SHOW TABLE STATUS LIKE 'table_name';

索引的统计数据:SHOW INDEX FROM table_name;

13.1 两种不同的统计数据存储方式

InnoDB 提供了两种存储统计数据的方式:

  1. 永久性的统计数据。存储在磁盘上,服务器重启之后还在。
  2. 非永久性的统计数据。存储在内存中,随服务器关闭而清除,服务器重启时可以重新收集。

13.2 基于磁盘的永久性统计数据

当我们选择把某个表以及该表索引的统计数据存放到磁盘上时,实际上是把这些统计数据存储到了两个表里:

SHOW TABLES FROM mysql LIKE 'innodb%';

在这里插入图片描述

  1. innodb_table_stats:存储了关于表的统计数据,每一条记录对应着一个表的统计数据。
  2. innodb_index_stats:存储了关于索引的统计数据,每一条记录对应着一个索引的一个统计项的统计数据。
13.2.1 innodb_table_stats
SELECT * FROM mysql.innodb_table_stats;

在这里插入图片描述

字段名描述
database_name库名
table_name表名
last_update本条记录最后更新时间
n_rows表中记录数(估计值)
clustered_index_size表的聚簇索引占用的页面数量(估计值)
sum_of_other_index_sizes表的其他索引占用的页面数量(估计值)
13.2.1.1 n_rows 统计项的收集

按照一定算法(并不是纯粹随机)选取几个叶子节点页面,计算每个页面中主键值的记录数量,计算平均数后×全部叶子节点数量 = n_rows,所以是一个估计值。

13.2.1.2 clustered_index_size 和 sum_of_other_index_sizes
  1. 从数据字典里找到表的各个索引对应的根页面位置
  2. 从根页面的 Page Header 里找到叶子节点段和非叶子节点段对应的 Segemnt Header
  3. 从叶子节点段和非叶子节点段的 Segemnt Header 中找到这两个段对应的 INODE Entry 结构
  4. 从对应的 INODE Entry 结构中找到该段对应所有零散的页面地址以及 FREE、NOT_FULL 和 FULL 链表的基节点
  5. 直接统计零散的页面有多少个,然后从那三个链表的 List Length 字段中读出该段占用的区的大小,每个区占用64个页,所以就可以统计出整个段占用的页面
  6. 分别计算聚簇索引和其余索引
13.2.2 innodb_index_stats
SELECT * FROM mysql.innodb_index_stats WHERE table_name = 'single_table';

在这里插入图片描述

字段名描述
database_name库名
table_name表名
index_name索引名
last_udpate本条记录最后更新时间
stat_name统计项的名称
stat_value统计项的值
sample_size为生成统计数据而采样的页面数量
stat_description统计项的描述
统计项描述
n_leaf_pages索引的叶子节点占用多少页面
size索引共占用多少页面
n_diff_pfxNN索引列不重复的值有多少
13.2.3 定期更新统计数据
  1. 开启 innodb_stat_auto_recalc
  2. 手动调用 ANALYZE TABLE 语句
13.2.4 手动更新 innodb_table_stats 和 innodb_index_stats 表
UPDATE innodb_table_stats
SET n_rows = 1
WHERE table_name = 'single_table';
FLUSH TABLE single_table;

13.3 基于内存的非永久性统计数据

新版本 MySQL 不用

13.4 innodb_stats_method 的使用

计算某个索引列不重复值的数量时如何对待 NULL 值,有三个候选值:

  1. nulls_equals:认为所有 NULL 值都是相等的。默认值
  2. nuls_unequals:认为所有 NULL 都是不相等的。
  3. nulls_ignored:直接把 NULL 值忽略掉。

13.5 总结

InnoDB 以表为单位来收集统计数据,可以是基于磁盘的永久性数据,也可以是基于内存的非永久性数据

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2139048.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

nvm安装并配置全局缓存文件

nvm下载,最新版为 1.1.12:Releases coreybutler/nvm-windows GitHub 下载exe,选择指定位置安装即可,安装及配置参考链接:window下安装并使用nvm(含卸载node、卸载nvm、全局安装npm)-CSDN博客 …

SpringBoot教程(安装篇) | RabbitMQ的安装

SpringBoot教程(安装篇) | RabbitMQ的安装 一、下载RabbitMQ(windows版本)1. 先下载 RabbitMQ2. 再下载Erlang3. 开始安装 Erlang4. 为Erlang配置环境变量5、验证安装6. 开始安装 RabbitMQ7. 启用RabbitMQ的管理插件(图…

学习整理vue前端框架项目目录结构的含义

学习整理vue前端框架项目目录结构的含义 1、目录结构2、结构含义 1、目录结构 2、结构含义

C++STL~~deque

文章目录 deque的概念deque的使用deque的练习总结 deque的概念 deque(双端队列):是一种序列容器、是一种双开口的"连续"空间的数据结构,双开口的含义是:可以在头尾两端进行插入和删除操作,且时间复杂度为O(1)&#xff…

F12抓包12:Performance(性能)前端性能分析

课程大纲 使用场景: ① 前端界面加载性能测试。 ② 导出性能报告给前端开发。 复习:后端(接口)性能分析 ① 所有请求耗时时间轴:“网络”(Network) - 概览。 ② 单个请求耗时:“网络”(Network&#xf…

FIB对芯片反向技术的贡献

目前由于国内在模拟集成电路设计领域的研究较为薄弱,芯片逆向分析便成为大多数模拟集成电路工程师基础实际模拟电路积累经验的有效途径,IC反向设计也成为推动国内集成电路设计进步的有效手段。在IC逆向分析与设计服务中,主要用FBI对IC线路进行…

计算机二级office操作技巧——Excel篇

文章目录 函数公式总结写在前面五大基本函数sum求和函数average求平均函数max求最大值函数min求最小值函数count求个数函数 rank排名函数if逻辑判断函数条件求个数函数countif单条件求个数函数countifs多条件求个数函数 条件求和函数sumifs多条件求和函数sumproduct乘积求和函数…

【学习笔记】线段树合并

前言 一般来说,线段树会有 O ( n ) O(n) O(n) 个节点。但是有的时候,整棵线段树就只进行了一次插入操作,这样只会有 O ( l o g n ) O(logn) O(logn) 个节点。 处理树上问题时,我们有时需要把儿子的信息合并到父亲节点。这个时候…

松理解数据库并发调度与可串行性

‍ 前言 在数据库系统中,多个事务的并发执行是不可避免的。然而,并发执行可能导致数据不一致的情况。为了解决这个问题,数据库管理系统(DBMS)使用调度策略来控制事务的执行顺序。本文将简洁地介绍可串行化调度这一概…

基于springboot旅游管理系统设计与实现

基于springboot旅游管理系统设计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本旅游管理系统就是在这样的大环境下诞生,其可以帮助使用…

[数据集][目标检测]智慧交通铁轨裂缝检测数据集VOC+YOLO格式4类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):2709 标注数量(xml文件个数):2709 标注数量(txt文件个数):2709 标注…

通过对比理解C++智能指针

理论 概述 智能指针:把管理资源的责任交给了对象,这样我们在使用结束时不需要显式地释放资源,而是由析构函数自动完成这一工作 它是一个类模板,可以创建任意类型的指针对象 智能指针使用时,资源对象不能被重复释放&a…

【CSS|第1期】网页设计的演变:从表格布局到Grid布局

日期:2024年9月9日 作者:Commas 签名:(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释:如果您觉在这里插入代码片得有所帮助,帮忙点个赞,也可以关注我,我们一起成长;如果有不对…

调用系统的录音设备提示:line with format PCM_SIGNED 16000.0 Hz

javax.sound.sampled.LineUnavailableException: line with format PCM_SIGNED 16000.0 Hz, 8 bit, mono, 1 bytes/frame, not supported. 打开 设置->隐私->麦克风->允许应用访问你的麦克风 与 16000Hz没关系 与 16000Hz没关系 与 16000Hz没关系

【iOS】dismiss多级的方法

前言 上次笔者总结过push和pop推入和推出界面的方法,这里对于dismiss多级的方法进行一个总结,推入推出方法可以看看笔者这篇博客:【iOS】UI学习——界面切换 dismiss推出多级的原理 当我们使用pop推入新的界面的时候,连续pop推…

复杂情感识别系统

复杂情感识别系统(CERS)是一种先进的技术平台,旨在通过分析情感的组合、相互关系及其动态变化来解读和识别复杂的情感状态。这种系统通常采用以下技术和方法: 机器学习与深度学习: 通过训练算法识别和解释大量情感数据…

从汇编语言到高级语言:人类计算机科学的伟大探索

从20世纪中叶第一台电子计算机的诞生,到如今的智能设备遍布全球,计算机科学的发展历程是一部充满着人类探索精神的伟大史诗。计算机语言作为人类与机器交流的桥梁,见证并推动了这一切。从最早的汇编语言到如今多样的高级语言,我们…

视频监控摄像头国标GB28181配置参数逐条解析

转载:视频监控摄像头国标GB28181配置参数逐条解析 现在的很多信息化项目,都会涉及到国标GB28181的视频监控产品,当我们配置这些国标平台,录像机,摄像头时,如果对相关参数的定义不清楚的话,会给我…

【Android 13源码分析】WindowContainer窗口层级-1-初识窗口层级树

在安卓源码的设计中,将将屏幕分为了37层,不同的窗口将在不同的层级中显示。 对这一块的概念以及相关源码做了详细分析,整理出以下几篇。 【Android 13源码分析】WindowContainer窗口层级-1-初识窗口层级树 【Android 13源码分析】WindowCon…

Redis基础数据结构之 quicklist 和 listpack 源码解读

目录标题 quicklist为什么要设计 quicklist?quicklist特点ziplist quicklist数据结构 listpacklistpack是什么?listpack数据结构ziplist干啥去了?为什么有listpack?什么是ziplist的连锁更新?listpack 如何避免连锁更新&#xff1…