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

表的统计数据: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.mfbz.cn/a/876225.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

华为 HCIP 认证费用和报名资格

在当今竞争激烈的信息技术领域,华为 HCIP认证备受关注。它不仅能提升个人的技术实力与职业竞争力,也为企业选拔优秀人才提供了重要依据。以下将详细介绍华为 HCIP 认证的费用和报名资格。 一、HCIP 认证费用 华为HCIP认证的费用主要由考试费和培训费构成…

Maven下载安装

下载 下载地址:Maven – Download Apache Maven 选择合适的版本进行下载 windows&Linux安装 1, 解压apache-maven-3.6.1.rar即安装完成 2, 配置环境变量MAVEN_HOME为安装路径,并将MAVEN_HOME的bin目录配置到PATH下 3,…

C#命令行参数解析库System.CommandLine介绍

命令行参数 平常在日常的开发过程中,会经常用到命令行工具。如cmd下的各种命令。 以下为sc命令执行后的截图,可以看到,由于没有输入任何附带参数,所以程序并未执行任何操作,只是输出了描述和用法。 系统在创建一个新…

最佳实践 · MySQL 分区表实战指南

引言 在数据量急剧增长的今天,传统的数据库管理方式可能无法有效处理海量数据的存储和查询需求。MySQL 提供了分区表功能,这不仅能够帮助优化性能,还能简化数据管理过程。分区表允许将数据表拆分成多个逻辑上的分区,每个分区可以…

资源管理新视角:利用 FastAPI Lifespan 事件优化你的应用II

本文说明在 FastAPI 应用程序中使用 lifespan 事件来管理资源的加载和卸载。lifespan 事件允许你在应用启动时执行一些初始化代码,并在应用关闭时执行一些清理代码。这是通过使用异步上下文管理器实现的,具体来说,是通过 asynccontextmanager…

什么是职场?职场的本质又是什么呢?

最近,经常看到很多职场相关的,比如职场必备技能、职场人际关系、职场晋升等等,这些都是职场的一些方面,但是却少有人来深入剖析什么是职场,职场的本质又是什么,今天我们就来一起来聊一聊,到底职…

音视频入门基础:AAC专题(5)——FFmpeg源码中,判断某文件是否为AAC裸流文件的实现

一、引言 通过FFmpeg命令: ./ffmpeg -i XXX.aac 可以判断出某个文件是否为AAC裸流文件: 所以FFmpeg是怎样判断出某个文件是否为AAC裸流文件呢?它内部其实是通过adts_aac_probe函数来判断的。从《FFmpeg源码:av_probe_input_for…

性能测试的复习3-jmeter的断言、参数化、提取器

一、断言、参数化、提取器 需求: 提取查天气获取城市名请求的响应结果:城市对查天气获取城市名的响应结果进行响应断言和json断言对查天气获取城市名添加用户参数 1、步骤 查看天气获取城市名 json提取器(对响应结果提取、另一个接口请求…

也许你该了解下,DeepSeek Coder这个国产目前最牛逼的编码大模型,或许你真的用得上

你是不是也有这样的困惑:代码写不出来、调不通、效率低下,明明花了几个小时,结果却一无所获?别担心,不光是你,我也曾经有过同样的苦恼。但今天我要和你聊的,是一个能够改变这种局面的新工具——DeepSeek Coder。这个工具有多厉害?它能帮你解决闭源代码难以获取的问题,…

复杂情感识别系统

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

Blender/3ds Max/C4D哪个软件好?

在3D建模和动画制作领域,Blender、3ds Max和Cinema 4D(C4D)都是备受赞誉的软件。每个软件都有其独特的优势和特点,选择哪个软件取决于用户的具体需求和个人偏好。今天,成都渲染101云渲染就来分析一些这三款软件的情况&…

Linux服务器配合Xshell+Tensorboard实现深度学习训练过程可视化

问题背景: 在深度学习领域,监控模型的训练过程是非常重要的。TensorBoard 是 TensorFlow 提供的一个可视化工具,可以帮助我们直观地理解模型的训练和验证过程。我们一般在 Windows 系统只需要在自己的浏览器输入localhost:6006就可以观察训练…

Java的发展史与前景

🌈个人主页:Yui_ 🌈Linux专栏:Linux 🌈C语言笔记专栏:C语言笔记 🌈数据结构专栏:数据结构 🌈C专栏:C 文章目录 0. Java语言的发展史1.概述1.1 什么是Java1.2 …

java项目之基于工程教育认证的计算机课程管理平台(源码+论文)

项目简介 基于工程教育认证的计算机课程管理平台的主要管理员可以管理教师,可以对教师信息修改删除以及查询操作;可以对通知公告信息进行添加,修改,删除以及查询操作;可以对学生信息进行添加,修改&#xf…

Oracle绑定变量窥视与自适应游标共享

一.Oracle的绑定变量窥视与自适应游标共享 创建test表,列status存在2个值,有数据倾斜,在列status create table test as select rownum id,DBMS_RANDOM.STRING(A,12) name,DECODE(MOD(ROWNUM,500),0,Inactive,Active) status from all_obj…

Rust Windows下编译 静态链接VCRuntime140.dll

Rust 编译出来的exe默认动态链接VC运行库,分发电脑上需要安装有Microsoft Visual C Redistributable for Visual Studio 2015运行库。 编译时能静态链接进去,就省去客户端未安装运行库的问题。方法如下: 只需在当前根目录下新建.cargo\config.toml&#…

【西电电装实习】6. 手装无人机的蓝牙断连debug

文章目录 前言零、闪灯状态零零、翻滚角,俯仰角,偏航角一、问题描述二、现象解释三、解决方案参考文献 前言 在 西电无人机电装实习 时遇到的问题使用蓝牙芯片 CH582F。沁恒的蓝牙芯片CH582F是一款集成了BLE(Bluetooth Low Energy&#xff0…

windows安装docker、elasticsearch、kibana、cerebro、logstash

文章目录 1. 安装docker1.1. 两大要点1.1.1. 安装启用hyper-v电脑不存在hyper-v的情况 1.1.2. 下载安装docker 2. 在docker里面安装elasticSearch,kibana,cerebro3. 安装logstash-将数据导入到elasticSearch3.1 安装logstash3.1.1 注意事项3.1.1.1. 等了…

[数据集][目标检测]高铁受电弓检测数据集VOC+YOLO格式1245张2类别

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

OrionX vGPU 研发测试场景下最佳实践之Jupyter模式

在上周的文章中,我们讲述了OrionX vGPU研发测试场景下最佳实践之SSH模式,今天,让我们走进 Jupyter模式下的最佳实践。 • Jupyter模式:Jupyter是最近几年算法人员使用比较多的一种工具,很多企业已经将其改造集成开发工…