《Mysql技术内幕,Innodb存储引擎》——文件、表

文件

日志

错误日志

对Mysql启动、运行和关闭过程进行记录,通过SHOW VARIABLES LIKE 'log_error'查看日志文件位置。

慢查询日志
  • Mysql启动时设置一个阈值,运行时间超过的所有SQL语句将记录到该日志。
  • long_query_time设置时间阈值,log_queries_not_using_indexes如果运行的SQL没使用索引则也记录慢查询日志,log_throttle_queries_not_using_indexes表示每分钟允许记录到日志的SQL语句次数。
二进制日志

binary log记录对Mysql数据库执行更改的所有操作。作用于一下:

  1. 恢复,某些数据恢复需要binary log
  2. 复制,主从结构数据同步需要
  3. 审计,判断是否存在注入攻击
表结构定义文件

Mysql是插件式存储引擎的体系结构,数据的存储是根据表进行的,因此每个表都会有对应的文件。其文件以frm后缀名。

InnoDB存储引擎文件
表空间

innodb将数据存储在表空间,默认会创建一个10MB的ibdata1的文件作为表空间。innodb_data_file_path设置文件,可同时设置多个并设置大小。innodb_file_per_table设置了则使每张表产生一个独立的表空间。

如果启用了innodb_file_per_table,每张表的表空间只是数据、索引和插入缓冲Bitmap页,其他类数据还是在共享表空间内。

redo log
  • 每个Innodb至少有1个redo log组,每个组下至少有2个redo log (默认为ib_logfile0和ib_logfile1)。
  • 日志组中每个日志文件大小一样,并循环写入。

索引组织表

Innodb中表根据主键顺序存放,如果表中无主键则根据一下顺序选择:

  1. 取非空唯一索引作为主键,多个则按照索引声明顺序选择。
  2. 自动创建一个6字节的指针

InnoDB逻辑存储结构

由大到小:表空间、段、区、页。

segment 段
  • 主要有数据段、索引段、回滚短等。
  • 数据段即B+树中叶子节点,索引段即非叶子节点。
extent 区
  • 不管页的大小,每个区的大小固定1MB。
  • 每个段开始时,先用32个页大小的碎片页存放数据,只有当这些页用完了才会申请分配一个区的磁盘。
page 页
  • 默认大小为16KB,innodb_page_size可以修改其页大小。
  • 主要类型:数据页、undo页、系统页、事物数据页、插入缓冲位图页、插入缓冲空闲列表页、未压缩的二进制大对象页和压缩的二进制大对象页

页结构

  1. File Header:记录页的一些头信息
  2. Page Header:记录数据页的状态信息
  3. Infimum和Supremum Record:为两个虚拟的行记录,前者记录该页最小还小的值,后者则记录最大还大的值
  4. User Record:实际存储行记录的内容
  5. Free Record:空闲空间
  6. Page Directory:记录在页中的相对位置,也称Slots(槽)或目录槽
  7. File Trailer:用来检测页是否已经完整写入磁盘,记录checksum值等。

分区表

分区的过程是将一个表或索引分解为多个更小的部分。Mysql只支持水平分区(按照行记录分配到不同物理文件),主要有一下几种:

  1. range分区:基于属于一个给定的连续区间的列值放入分区。
  2. list分区:list分区面向的是离散的值。
  3. hash分区:分局自定义表达式的返回值进行分区
  4. key分区:mysql提供的哈希函数进行分区

用分区表要慎重!!!

转载于:https://www.cnblogs.com/suolu/p/6596724.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值