1、Mysql逻辑架构图
场景一:一条SQL语句如何执行?
如图显示一条SQL语句的执行过程:
执行器的执行流程:
2、Mysql日志系统
说到日志系统,需要了解几个概念:creash-safe、redo log、binlog、WAL技术。
Redo log用于保证crash-safe能力。innodb_flush_log_at_trx_commit =1表示每次事务的redo log 都持久化到磁盘,保证mysql异常重启之后数据不丢失。Sync_binlog=1参数设置为1,表示每次事务的binlog都持久化到磁盘,保证mysql异常重启之后binlog不丢失。
Crash-safe:有了redo log,InnoDB就可以保证即使数据库发生异常重启,之前提交的记录都不会丢失。
日志系统只要有2个模块:存储引擎里的redo log日志;服务器-执行器中的binlog归档日志。
WAL技术:Write-Ahead Loggin,先记录到归档日志redo log里面,更新完成。InnoDB引擎在适当的时候,将这个更新记录更新到(服务器-执行器)磁盘。(闲时)
PS:归档日志大小可以进行配置
场景一:一条SQL更新语句是如何执行的?
前提:创建表 create table T(ID int primary key,c int),插入一条ID=2的语句。