《从根上理解MySQL是怎样运行的》第十三章笔记

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

查询成本的时候经常使用一些统计数据,统计数据是以什么方式收集来的呢?


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

(1)永久性:存储在磁盘上的

(2)非永久性:存储在内存上的

可以指定相关的系统变量来选择使用哪种方式来存储,一般默认是存储在磁盘上的


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

存储的时候是将统计数据存储到表中的:


innodb-table-stats介绍

直接看下哪些列吧:

N-rows是估计值:InnoDB中按照一定的算法选取几个叶子节点页面,计算该节点中页中的记录数,然后这几个页记录数的平均数乘以所有叶子节点的数量就是该表的n-rows的值

个人思考:感觉就像是抽样调查,通过样本估计总体的个数量


Clusterted-index-size 和 sum-of-other-index-sizes统计项的收集

聚簇索引和其他索引的统计

这个统计数据的过程如下:

(1)从字典数据中找出各个索引的根页面的位置:

就是从表中之表中查询所有索引的老家在哪里

(2)从根页面的Page Header中找到叶子节点和非叶子节点的段Segment Header(段头部信息)

(3)然后再从这些Segment Header字段中找到对应的INODE Entry结构

(4)从这个结构中找到对应所有零散的页面地址以及FREE、NOT-FULL、FULL链表的基节点

然后你有了这个链表就可以开始统计数据了

小总结:字典数据 -》 两种节点对应段的信息 -〉 然后再从这些字段中找到对应的段结构 -》 最后得到主要的从属于段段三个链表的位置 -〉 数据统计

其实统计的着手点还是从管理页面的链表开始的,这下就好理解了:统计的过程主要就是重新寻找管理页面的链表的过程 + 统计


innodb-index-stats页介绍

看看各个列:

Index-name:说明记录是来自哪个索引的

Stat-name:统计同一个索引的各种值:叶节点占用页数,索引占用总页数

总之是各种统计的信息都在这上面


定期更新统计数据

统计数据更新的方式:

(1)innodb-stats-auto-recalc

自动重新统计数据:修改的记录数超过10%则自动重新统计(延迟异步统计)。InnoDB默认是以表来收集和存储统计数据的,搜易可以单独为某个表设置这个参数

(2)手动更新:手动调用ANALYZE TABLE来执行更新,这个就没什么好说的


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

这个很复杂,就不了解了哈哈哈💦


总结

InnoDB将统计数据存储到表中,可以是永久也可以是非永久的

通过各种参数可以指定使用哪种类型的统计数据

针对不同的表可以自定义相关数据统计属性

对于表中的NULL值有专门的参数来决定如何处理


第二天复习

这个数据的统计并不是数据库功能的核心啊,这里我们稍做了解即可

相关推荐
njsgcs5 分钟前
SIMA2 论文阅读 Google 任务设定器、智能体、奖励模型
人工智能·笔记
TDengine (老段)27 分钟前
TDengine Python 连接器进阶指南
大数据·数据库·python·物联网·时序数据库·tdengine·涛思数据
赵渝强老师36 分钟前
【赵渝强老师】OceanBase的配置文件与配置项
数据库·oceanbase
云半S一1 小时前
pytest的学习过程
经验分享·笔记·学习·pytest
玖日大大1 小时前
OceanBase SeekDB:AI 原生数据库的技术革命与实践指南
数据库·人工智能·oceanbase
AI视觉网奇1 小时前
ue5.7 配置 audio2face
笔记·ue5
高溪流2 小时前
3.数据库表的基本操作
数据库·mysql
alonewolf_993 小时前
深入剖析MySQL锁机制与MVCC原理:高并发场景下的数据库核心优化
数据库·mysql
一 乐3 小时前
绿色农产品销售|基于springboot + vue绿色农产品销售系统(源码+数据库+文档)
java·前端·数据库·vue.js·spring boot·后端·宠物
黄宝康3 小时前
sqlyog密钥亲测有效
mysql