存储引擎:
负责数据存储,与文件打交道,是根据mysql提供的文件访问层抽象接口定义的一种文件访问机制。
InnoDB:
5.5版本作为mysql的默认引擎。
支持事务和外键,具有提交,回滚,崩溃恢复能力。
myisam:不支持事务和外键,访问速度快。
InnoDB与myisam对比:
事务方面–>InnoDB支持事务,myisam不支持事务。
锁机制–>InnoDB支持行级锁,基于索引。myisam支持表级锁。并发能力不行。
索引–>InnoDB采用聚集索引,索引和记录一起存储。myisam采用非聚集索引。
索引和记录分开存
并发能力–>myisam写操作并发率低,读写阻塞。InnoDB读写阻塞可以通过隔离级别控制,可采用mvcc支持并发。
存储–>innodb:表元数据存在.frm文件,一个.ibd对象一个表。默认64TB,myisam表元数据存在.frm文件,MYD文 件存数据,MYI文件存索引。
myisam适用场合:
i不要事务,并发要求低,数据改动小,如配置 表,权限表,国标码表等 。
InnoDB:
要事务,行级锁对高并发有很好适应能力。数据更新频繁。
大部份场合下都使用innoDB.
InnoDB内存结构:
Buffer Pool change Buffer logBuffer adaptive hash index
Buffer Pool:
采用page管理机制,有三类page:
freePage 空闲页
clean page 正在使用页,未被修改的记录
dirty page 脏页,正在使用页,被修改的记录。
对应三类列表管理page:
free list:管理空闲缓存区。
flush list:管理 脏页,刷盘缓冲区。
lur list,管理 正在使用的缓存区,和脏页。采用lru算法,以midpoint为界,前链表为new列表区,存经常访问的数据,约占67%,后界为old列表,占37%.使用lru算法管理数据:
lur算法:
普通lur:释放空间,从尾部淘汰数据。
改进lru算法:从中间midpoint插入数据,如果数据很快被访问,向new头部移动,否则向old属部移动,进行未尾淘汰。
数据进入缓存区步骤:
来了新page,去空闲缓冲区找是否有空闲,有的话从free list删除,放入lru list,没有,lru算法淘汰未尾,释放空间给新页。
changeBuffer写缓冲区
当更新一条记录时,该记录在BP中存在, 直接在BP中修改一次内存操作,如果不存在,在changeBuffer中作内存操作。避免IO,当下次查询记录时,会进行磁盘读取。然后从cB中读取信息合并,最终载入BP中。
InnoDB磁盘:
系统表空间,创建 表的数据索引等,多个表共享。
File_pre_tablespace:独立表空间,表数据独立,一个表一个.ibd文件。支持压缩处理。
general tablespace 通用表空间,
temp表空间 临时表空间,存临时表用
undo tablespace,撤消表空间,用于事务回滚还原数据。
innodb文件存储结构
段–>区–>页–>行
一个表至少2个段,一个管理数据,一个管索引。
一个区64个连续的页,1M,表空间不足时,直接分配一个区。
页:数个row,大小16K,
binlog使用场景:
主从复制
数据恢复
binLog记录模式:
Row模式:每一行修改记录能实现主从数据同步和数据恢复,能清楚的记录每一行修改记录。缺点是日志 文件大。
statment:与row模式相关
BinLog与RedoLog区别
redolog属于innodb引擎,binlog属于mysql自带功能,并且是以二进制文件记录。
redolog属于物理日志,记录该数据页更新内容,binlog是逻辑日志,记录更新过程。
redolog是覆盖写入,binlog是追加写入。
redolog作为服务器异常宕机事务数据自动恢复使用。binlog可以作为主从复制和数据恢复使用。