mysql之架构篇

一、mysql架构之组件

1、SQL接口

它是mysql自己定义的一个专门用于处理增删改查操作的数据库组件。

2、SQL解析器

该组件的功能是将我们写的SQL语句转换成mysql能看懂的语言。

3、查询优化器

该组件可以使SQL执行选择最优路径,确定应该怎样执行SQL。

4、存储引擎

存储引擎是mysql的核心组件,存储引擎是用来执行SQL语句的,它可以操作内存和磁盘中的数据。

5、SQL执行器

该组件是用来调用存储引擎接口,来具体执行SQL语句。

6、binlog日志

归档日志,用于记录数据库中的数据变动信息,使用sync_binlog来控制刷盘策略,其中
0代表提交表示MySQL不控制binlog的刷新,由文件系统自己控制它的缓存的刷新,
1代表示每次事务提交,MySQL都会把binlog刷下去,是最安全但是性能损耗最大的设置,
N表示每写N次操作系统缓冲就执行一次刷新操作。

二、InnoDB存储引擎介绍

buffer pool

buffer pool是InnoDB引擎的重要内存结构,mysql所有的增删改查都是基于缓冲池来进行的,当需要操作某一条数据时,会将该数据所在的数据页

加载到内存中,然后基于缓冲池来进行增删改查操作。

undo log日志

用于记录更新前的数据,主要用于事务的回滚和mysql关于并发事务处理的MVCC机制。

redo log日志

该日志是用来记录你修改的数据,防止buffer pool中的数据未刷入磁盘时,mysql突然宕机等情况造成的数据丢失,该日志可以用于恢复你更新过的数据。

redo log buffer

这也是一个放到内存中的缓存空间,该缓存主要用于存放数据操作时生成的redo log日志。既然redo log是用来防止buffer pool中的数据丢失的,那么同样

的redo log buffer中的数据也会面临数据丢失的问题,针对redo log buffer中的数据,mysql提供了innodb_flush_log_at_trx_commit来控制刷盘策略,

innodb_flush_log_at_trx_commit=0,在提交事务时,InnoDB不会立即触发将缓存日志写到磁盘文件的操作,而是每秒触发一次缓存日志回写磁盘操作,并调用操作系统fsync刷新IO缓存。
innodb_flush_log_at_trx_commit=1,在每个事务提交时,InnoDB立即将缓存中的redo日志回写到日志文件,并调用操作系统fsync刷新IO缓存。
innodb_flush_log_at_trx_commit=2,在每个事务提交时,InnoDB立即将缓存中的redo日志回写到日志文件,但并不马上调用fsync来刷新IO缓存,而是每秒只做一次磁盘IO缓存刷新操作。

一般推荐设置为1

三、数据更新流程

四、推荐一个很优秀的mysql数据库专栏儒猿技术窝mysql专栏

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值