文件组织
定长记录:文件头维护空闲列表
变长记录:
块头 + 空闲空间 + 记录
插入:在空闲空间末尾分配空间
删除:将条目之前的全部向后移动
大对象通常存储到特殊文件,通过指针存储在记录中
文件类型
参数文件
日志文件
套接字文件:通过套接字文件,UNIX系统下本地连接MySQL可以采用Unix域套接字方式
pid文件:MySQL实例的进程ID
表结构定义文件:每个表都有对应的文件
存储引擎文件:每个表存储引擎独有的文件
日志文件
错误日志
慢查询日志:
运行时间超过阈值的SQL语句
没有使用索引的SQL语句
查询日志:所有对数据库请求的信息
二进制日志:
所有对数据库执行更改的操作
未提交的二进制日志会记录到缓存中(缓冲不够时写入临时文件),事务提交时将缓存写入二进制文件
查询日志:
所有对数据库请求的信息
存储引擎文件
表空间文件:存储数据按表空间进行存放
redo log文件:
每个redo log文件组采用循环方式,先写1,达到文件最后,再写2
redo log与二进制文件的差异:
1.记录的引擎不同:二进制文件记录所有与MySQL有关的存储引擎日志
redo log只记录InnoDB存储引擎的事务日志
1.记录内容不同:二进制文件记录事务的具体操作
redo log记录每个页更改的物理情况
2.写入时间不同:二进制日志文件在事务提交前记录
redo log在事务进行中被写入
对redo log的写入,先写入缓冲,然后写入文件
redo log写入文件的触发条件:1.mater thread每秒执行
2.提交时,innodb_flush_log_at_trx_commit = 0:不写入
1:将缓冲同步到磁盘
2:异步写到磁盘