暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Mysql逻辑存储结构与各类文件的作用

波波的小书房 2021-04-21
440
InnoDB逻辑存储结构

表空间 > 段segment > 区extent > 页page(块block) > 行

表空间:
查看是否开启为每个表生成一个单独的表空间文件
show variables like '%innodb_file_per_table%'
复制


查看默认表空间文件
show variables like '%innodb_data_file_path%'
复制


可以将所有表都放到默认表空间,也可以为每个表单独设置一个表空间,但该表空间只存放该表的数据、索引、插入缓冲等专属信息,其它信息还是放在默认表空间。

段:
  • 数据段:B+树的叶子结点
  • 索引段:B+树的非叶子结点
  • 回滚(undo)段

区:
  • 区的大小1MB = 64个页 * 页大大小16KB;

页:
  • 页是InnoDB磁盘管理的最小单位,每个页默认大小为16KB;
  • 注意:Mysql的逻辑页与磁盘页不一样;

磁盘页:
从磁盘的物理结构来看存取的最小单位是扇区,一个扇区是512字节;
微软操作系统(DOS、windows等)中磁盘文件存储管理的最小单位叫做簇。一簇就是一组连续的扇区,每个簇可以包括2、4、8、16、32或64个扇区;
一个文件通常存放在一个或多个簇里,但至少要单独占据一个簇,即两个文件不能存放在同一个簇中;
NTFS文件系统格式化的时候默认是8个扇区组成一个簇,即4096字节,4kb,而MySQL读取数据的最小单位为页,默认大小为16kb;


InnoDB各类文件

构成Mysql数据库和InnoDB存储引擎表的各种类型文件,主要有以下几种:
  • 参数文件:Mysql实例启动时需要;
  • 日志文件:如错误日志、二进制日志、慢查询日志、查询日志、中继日志等;
  • socket文件:可用于连接Mysql;
  • pid文件:Mysql实例进程ID;
  • Mysql表结构文件:存放Mysql表结构定义(frm文件);
  • 存储引擎文件:存储表记录和索引等(ibd文件);

参数:
  • 静态参数
  • 动态参数:实例运行时可动态修改

如何查询和修改参数:
set global key=name
set session key=name
set @@global key=name
set @@session key=name
select @@global.key
select @@session.key

复制



二进制日志(binlog):
  • 记录所有对Mysql数据库执行更改的操作,select和show这类操作不记录;
  • 默认情况下不开启,开启后性能也只下降1%(Mysql官方手册说的);
  • 当使用事务的存储引擎(如InnoDB)时,所有未提交的二进制日志会被记录到一个缓冲区(binlog_cache)中去,等事务提交后再一起刷入到二进制日志中,该缓冲区是基于会话的,即每个会话对应一个缓冲区;

慢查询日志(slow query log):
  • 可以在Mysql启动时设置一个阈值参数long_query_time,将运行时间超过该值的SQL记录下来;
  • 默认情况下不开启;

查询日志(log):
  • 记录了所有对Mysql数据库的请求信息,无论这些请求是否得到了正确的执行;

InnoDB存储引擎文件:
  • 表空间文件
  • 重做日志文件(redo log file):对InnoDB存储引擎至关重要,用来记录InnoDB的事务日志。

二进制日志和重做日志的区别:
  • 二进制日志记录的是所有与Mysql有关的日志,而重做日志只记录InnoDB的事务日志;

  • 二进制日志仅在事务提交前写一次,即一个事务写一次,不管事务多大;而重做日志在事务进行过程中,不断有重做日志条目写入;


重做日志写入过程如下图所示。
重做日志条目先写入重做日志缓冲,再写入磁盘上的重做日志文件组。
重做日志缓冲往磁盘写入时,是按一个扇区大小写入的,即512字节。

文章转载自波波的小书房,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论