《从根上理解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值有专门的参数来决定如何处理


第二天复习

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

相关推荐
YHHLAI10 分钟前
基于 Next.js 16 + Redis 的全栈笔记博客系统
javascript·redis·笔记
Zixhy2 小时前
手撕Reactor模型实现同步高并发服务器及Muduo网络库深入解析
linux·服务器·网络·数据库·c++
程序员清风9 小时前
Java 后端高并发设计:线程池、限流、熔断与降级
java·数据库·oracle
天衍四九-9 小时前
MySQL中如何定位慢查询?如果SQL语句执行很慢,如何分析和优化?
数据库·sql·mysql
尚久龙10 小时前
mysql-5.7.26-winx64的安装步骤
数据库·mysql
医疗信息化王工10 小时前
DataForge:基于 Python 的数据库批量导出 Excel 工具——从架构到部署的全流程实战
数据库·python·excel
-SOLO-10 小时前
开发笔记-摸鱼输入法
笔记
实心儿儿10 小时前
MySQL 的安装
数据库·mysql·adb
程序员阿鹏12 小时前
为什么MySQL InnoDB选择B+树?
数据结构·数据库·b树·sql·mysql·算法·缓存
疯狂打码的少年12 小时前
【计算机网络】TCP/IP协议族(四层体系结构,与OSI对比)
网络·笔记·tcp/ip·计算机网络