MySQL-File Page Type
参考文献
MySQL 源码
MySQL5.6 File Page Types
来源storage/innobase/include/fil0fil.h
File Page Type
十进制
16进制
含义
说明
FIL_PAGE_INDEX
17855
0x45BF
B-tree node
B+树叶节点
FIL_PAGE_UNDO_LOG
2
0x0002
Undo log page
Undo Log页
FIL_PAGE_INODE
3
0x0003
Index node
索引节点
FIL_PAGE_IBUF_FREE_LIST
4
0x0004
Insert buffer free list
Insert Buffer空闲列表
FIL_PAGE_TYPE_ALLOCATED
0
0x0000
Freshly allocated page
该页为最新分配
FIL_PAGE_IBUF_BITMAP
5
0x0005
Insert buffer bitmap
Insert Buffer位图
FIL_PAGE_TYPE_SYS
6
0x0006
...
InnoDB(五)-InnoDB存储结构
参考文献
MySQL技术内幕 InnoDB存储引擎
极客时间–SQL必知必会(陈旸)
索引组织表
在InnoDB存储引擎中,表都是根据主键顺序组织存放的,这种存储方式的表称为索引组织表(index organized table).在InnoDB存储引擎表中,每张表都有个主键(Primary Key),如果在创建表时没有显示地定义主键,则InnoDB存储引擎会按如下方式选择或创建主键:
首先判断表中是否有非空的唯一索引(Unique Not Null),如果有,则该列即为主键.
如果不符合上述条件,InnoDB存储引擎会自动创建一个6字节大小的指针.
当表中有多个非空唯一索引,InnoDB存储引擎将选择建表时第一个定义的非空唯一索引为主键.需要特别注意的是,主键的选择根据的是定义索引的顺序,而不是建表是列的顺序.
123456789create table z( a int not null, b int null, c int not null, d int not null, unique key (b), unique key (d), unique key (c ...
InnoDB(四)-InnoDB文件
参考文献
MySQL技术内幕 InnoDB存储引擎
参数文件
当MySQL实例启动时,数据库会先去读一个配置参数文件,用来寻找数据库的各种文件所在位置以及指定某些初始化参数,这些参数通常定义了某种内存结构有多大等.
可以通过命令SHOW VARIABLES来查看数据中的所有参数,也可以通过LIKE来过滤参数名.从MySQL5.1版本开始,可以通过performance_schema架构下的GLOBAL_VARIABLES视图来进行查找.
12345678910111213141516171819202122232425262728293031323334mysql> select * from global_variables where variable_name like 'innodb_buffer%';+-------------------------------------+----------------+| VARIABLE_NAME | VARIABLE_VALUE |+-------- ...
InnoDB-InnoDB线程
参考文献
千金良方: MySQL性能优化金字塔法则
InnoDB后台线程
123456789101112131415161718192021222324252627282930313233343536373839404142434445mysql> select name,type,thread_id,processlist_id from performance_schema.threads;+---------------------------------------------+------------+-----------+----------------+| name | type | thread_id | processlist_id |+---------------------------------------------+------------+-----------+----------------+| thread/sql/main ...
InnoDB(三)-InnoDB关键特性
参考文献
MySQL技术内幕 InnoDB存储引擎
InnoDB存储引擎的关键特性
插入缓冲(Insert Buffer)
两次写(Double Write)
自适应哈希索引(Adaptive Hash Index)
异步IO(Async IO)
刷新邻接页(Flush Neighbor Page)
Insert Buffer
虽然InnoDB缓冲池中也有Insert Buffer 信息,但是Insert Buffer 和数据页一样,也是物理页的一个组成部分.
在InnoDB存储引擎中,主键是行唯一的标识符.通常应用程序中行记录的插入顺序是按照主键递增的顺序进行插入的.因此,插入聚集索引(Primary Key)一般是顺序的,不需要磁盘的随机读取.
TIPS: 并不是所有的主键插入都是顺序的,若主键类是UUID这样的,那么插入和辅助索引一样,同样是随机的.即使主键是自增类型,但是插入的是指定的值,而不是NULL值,那么同样可能导致插入并非连续的情况.
B+树的特性决定了非聚集索引插入的离散性
解释:
B+树的叶节点是有序的。当它用于聚集索引的时候,叶节点本身既是索引又是 ...
SpringBoot,SpringFramework,SpringCloud版本映射关系
参考文献
springboot依赖springframework版本关系
SpringBoot与SpringCloud版本对应关系
https://start.spring.io/actuator/info
SpringBoot1.X与SpringFramework版本对应表
SpringBoot版本
依赖SpringFramework版本
发布时间
1.0.x
1.0.0.RELEASE
4.0.3.RELEASE
2014.04
1.0.1.RELEASE
4.0.3.RELEASE
2014.04
1.0.2.RELEASE
4.0.3.RELEASE
2014.04
1.1.x
1.1.0.RELEASE
4.0.5.RELEASE
2014.06
1.1.1.RELEASE
4.0.5.RELEASE
2014.06
1.1.2.RELEASE
4.0.5.RELEASE
2014.06
1.1.3.RELEASE
4.0.5.RELEASE
2014.06
1.1.4.RELEASE
4.0.6.REL ...
InnoDB(二)-CheckPoint技术
参考文献
MySQL技术内幕 InnoDB存储引擎
Checkpoint技术
缓冲池的设计目的为了协调CPU速度与磁盘速度的鸿沟.因此页的操作首先都是在缓冲池中完成的.如果一条DML语句,如UPDATE或DELETE改变了页中的记录,那么此时页是脏的,即缓冲池中页的版本要比磁盘的新.数据库需要将新版本的页从缓冲池刷新到磁盘.
若每次一个页发生变化,就将新页的版本刷新到磁盘,那么这个开销是非常大的.若热点数据集中在某几个页中,那么数据库的性能将变得非常差.同时,如果在从缓冲池将页的新版本刷新到磁盘时发生了宕机,那么数据就不能恢复了.
为了避免发送数据丢失的问题,当前事务数据库系统都普遍采用了Write Ahead Log策略,即当事务提交时,先写重做日志,再修改页.当由于发生宕机而导致数据丢失时,通过重做日志来完成数据的恢复.
Checkpoint(检查点)技术的目的是解决以下几个问题:
缩短数据库的恢复时间;
缓冲池不够用时,将脏页刷新到磁盘;
重做日志不可用时,刷新脏页;
当数据库发生宕机时,数据库不需要重做所有日志,因为Checkpoint之前的页都已经 ...
InnoDB(一)-InnoDB体系架构
参考文献
MySQL技术内幕 InnoDB存储引擎
https://dev.mysql.com/doc/refman/8.0/en/innodb-architecture.html
数据库和数据库实例
从概率上说,数据库是文件的集合,是依照某种数据模型组织起来并存放与二级存储其中的数据集合;
数据库实例是程序,是位于用户与操作系统之间的一层数据管理软件,用户对数据库数据的任何操作,包括数据库定义,数据查询,数据维护,数据库运行控制等都是在数据库实例下进行的,应用程序只有通过数据库实例才能和数据库打交道.
MySQL版本与InnoDB版本对照表
MySQL版本
InnoDB版本
版本开始时间
说明
1.0.x
1996
3.11.1
1996.10
MySQL没有2.x版本
4.0.x
2003
5.1.x
1.0.x版本(官方称为InnoDB Plugin)
5.5.x
1.1.x版本
2010
使用InnoDB作为默认引擎
5.6.x
1.2.x版本
8.0.x
8.0.x
2016
InnoDB体系架构
上 ...
网络基础(二)-HTTP安全-HTTPS
参考文献
[SSL/TLS Handshake: Detailed Process and How does it Work](SSL/TLS Handshake: Detailed Process and How does it Work)
极客时间 透视HTTP协议
HTTPS
如果通信过程具备了四个特性,就可以认为是“安全”的,这四个特性是:机密性、完整性,身份认证和不可否认.
机密性(Secrecy/Confidentiality)是指对数据的“保密”,只能由可信的人访问,对其他人是不可见的“秘密”,简单来说就是不能让不相关的人看到不该看的东西.
完整性(Integrity,也叫一致性)是指数据在传输过程中没有被篡改,不多也不少,“完完整整”地保持着原状.
身份认证(Authentication)是指确认对方的真实身份,也就是“证明你真的是你”,保证消息只能发送给可信的人.
不可否认(Non-repudiation/Undeniable),也叫不可抵赖,意思是不能否认已经发生过的行为,不能“说话不算数”“耍赖皮”.
SSL/TLS
SSL(Secure Soc ...
MySQL(二十四)-解读死锁日志
参考文献
手把手教你解数据库死锁
死锁日志
前置知识
supremum记录
supremum这条记录是啥?
我们可以简单理解为是数据页中的一条“伪记录”.mysql的数据页中,不管有多少自己的记录,始终会存在两条虚拟的记录,也就是伪记录,分别是“Infimum”(最小记录)和“Supremum”(最大记录).要知道,一个数据页中多条记录存储类似于链表,Infimum->1->2->3->…->Supremum,这种.
通过SHOW ENGINE INNODB STATUS查看
日志解析
日志来自于MySQL(二十二)-死锁分析的唯一键死锁 (Delete + Insert)案例
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950------------------------LATEST DETECTED DEADLOCK------------------------2022-04-05 16:11: ...