本篇先介绍 下Innodb表空间,文件相关的内存数据结构。
1. 数据结构
Innodb的tablespace和文件的关系,是一对多的关系,先来看三个结构体
1. fil_system_struct:
表示Innodb的表空间内存cache,innodb一共包括两类tablespace,即
#define FIL_TABLESPACE 501 /*!< tablespace */
#define FIL_LOG 502 /*!< redo log */
而fil_tablespace有包括了两类,一类是用户的数据,一类是系统表空间。
例如:在MySQL 5.5,设置innodb innodb_file_per_table=ON;
每次create table的时候,就会创建一个新的tablespace,对于与*.ibd数据文件。
2. fil_space_struct
表示innodb的表空间, 包含了space_id,已经属于这个space的文件列表chain。
3. fil_node_struct
表示一个表空间里的数据文件
所以,在innodb中,三种之间的关系就是:
fil_system_t : fil_space_t = 1:n
fil_space_t : fil_node_t = 1:n
2. 初始化和装载
static fil_system_t* fil_system = NULL;
fil_system是一个单实例,系统启动的时候,会装载表空间,例如:
fil_open_log_and_system_tablespace_files:在startup的时候就会打开log表空间和系统表空间的文件,因为受到
ulint max_n_open; /*!< n_open is not allowed to exceed this */
的限制,所以保持log和系统表空间文件一直打开状态。
fil_space_struct:中维持了一个space_id的list,以便进行遍历和查找。以及fil_node_t的chain,即这个space里包含的所有文件。
fil_node_t: 表示一个os上的文件,包括文件的打开状态,文件句柄等信息。
相关的函数:
fil_node_create:创建一个文件节点,加入到space中
fil_space_create:创建一个space,加入到系统中tablespace cache
fil_init:初始化系统的tablespace memory cache
3. innodb 逻辑结构关系
这里表示了innodb的存储层的逻辑对象之间的关系,如果设置了innodb_per_file=on,那么对应每一个tablespace,都有ibd文件与之对应。
除了上面的逻辑关系,真正的物理存储是在文件上,如何在一个ibd文件上,体现出这些逻辑对象呢。
1. ibd file page分布
FSP_HAEDER表示了这个表空间,extent desp表示extent的指针,
innod list,存储了这个表空间的所有的segment。
这样,表空间,段,extent就建立了关系。
2. 一个page的结构
这个page:16k,表示了index的一个page的结构,FIL_header记录属于哪个space_id等信息,page_header记录着这个index相关的信息。
Innodb物理存储结构系列1的更多相关文章
-
Innodb物理存储结构系列2 行记录格式
前一篇讨论了Innodb system,表空间,文件的关系及数据结构,这一篇记录下Innodb行记录的格式. 前提: 1. server层和innodb层都有自己对于record的记录格式,需要进行转 ...
-
InnoDB表存储结构及keyring加密
ibdata是InnoDB最重要的系统表空间文件,它记录了InnoDB的核心信息,包括事务系统信息.元数据信息,记录InnoDB change buffer的btree,防止数据损坏的double w ...
-
InnoDB的表类型,逻辑存储结构,物理存储结构
表类型 对比Oracle支持的各种表类型,InnoDB存储引擎表更像是Oracle中的索引组织表(index organized table).在InnoDB存储引擎表中,每张表都有个主键,如果在创建 ...
-
InnoDB 逻辑存储结构
本文同时发表在https://github.com/zhangyachen/zhangyachen.github.io/issues/80 如果创建表时没有显示的定义主键,mysql会按如下方式创建主 ...
-
Innodb页面存储结构-2
上一篇<Innodb页面存储结构-1>介绍了Innodb页面存储的总体结构,本文会介绍页面的详细内容,主要包括页头.页尾和记录的详细格式. 学习数据结构时都说程序等于数据结构+算法,而在i ...
-
学习笔记:oracle学习一:oracle11g体系结构之物理存储结构
目录 1.物理存储结构 1.1 数据文件 1.2 控制文件 1.3 日志文件 1.3.1 重做日志文件 1.3.2 归档日志文件 1.4 服务器参数文件 1.4.1 查看服务器参数 1.4.2 修改服 ...
-
(1.3)学习笔记之mysql体系结构(C/S整体架构、内存结构、物理存储结构、逻辑结构)
目录 1.学习笔记之mysql体系结构(C/S架构) 2.mysql整体架构 3.存储引擎 4.sql语句处理--SQL层(内存层) 5.服务器内存结构 6.mysql如何使用磁盘空间 7.mysql ...
-
innodb的存储结构
如下所示,innodb的存储结构包含:表空间,段,区,页(块),行 innodb存储结构优化的标准是:一个页里面存放的行数越多,其性能越高 表空间:零散页+段 独立表空间存放的是:数据.索引.插入缓冲 ...
-
算法与数据结构(四) 图的物理存储结构与深搜、广搜(Swift版)
开门见山,本篇博客就介绍图相关的东西.图其实就是树结构的升级版.上篇博客我们聊了树的一种,在后边的博客中我们还会介绍其他类型的树,比如红黑树,B树等等,以及这些树结构的应用.本篇博客我们就讲图的存储结 ...
随机推荐
-
在Parallel中使用DbSet.Add()发现的一系列多线程问题和解决过程
发现问题 需求很简单,大致就是要批量往数据库写数据,于是打算用Parallel并行的方式写入,希望能利用计算机多核特性加快程序执行速度.想的很美好,于是快速撸了类似下面的一串代码: using (va ...
-
LPC1768/1769之CAN控制器概述(附库函数下载地址)
一.背景: 使用LPC1769来做CAN的收发,在此对使用LPC1769的CAN控制器进行收发做个总结和记录,以备下 次开发快速上手使用. 附:LPC1768/1769除了支持最高频率不同以外,其它基 ...
-
一般html5 手机端头部需要
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...
-
CRC-16/XMODE X16+X12+X5+1 C#、C和java环境下实现
private byte[] CRC(byte[] x, int len) //CRC校验函数 { ]; UInt16 crc = ; byte da; ; UInt16[] yu = { 0x000 ...
-
不要温柔地走入AMD
1.无依赖情况 <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...
-
Spring MVC常用的注解
@Controller @Controller 负责注册一个bean 到spring 上下文中,bean 的ID 默认为 类名称开头字母小写,你也可以自己指定,如下 方法一: @Controller ...
-
hdu4670(树上点分治+状态压缩)
树上路径的f(u,v)=路径上所有点的乘积. 树上每个点的权值都是由给定的k个素数组合而成的,如果f(u,v)是立方数,那么就说明f(u,v)是可行的方案. 问有多少种可行的方案. f(u,v)可是用 ...
-
python之路day01--变量
一.变量 变量就是将一些运算的中间结果暂存到内存中,以便后续代码块调用. 规范: 1.必须由数字.字母.下划线任意组合,且不能数字开头. 2.不能是python中的关键字.如:‘print’ 'and ...
-
LeetCode 19 Remove Nth Node From End of List (移除距离尾节点为n的节点)
题目链接 https://leetcode.com/problems/remove-nth-node-from-end-of-list/?tab=Description Problem: 移除距离 ...
-
swift pop实现动感按钮动画
// // MyButton.swift // PopInstall // // Created by su on 15/12/11. // Copyright © 2015年 tian. A ...