网站推广怎么推,wordpress积分推广插件,wordpress分栏插件,网站建设与规划案例执行流程
update t set name XXX where id 1;
加载id1的记录所在的整页数据到缓存池#xff1b;旧值写入undolog便于回滚#xff1b;更新内存数据#xff1b;写redo log到RedoBuff#xff1b;redo log顺序写入磁盘#xff0c;准备提交事务#xff08;prepare阶段 XXX where id 1;
加载id1的记录所在的整页数据到缓存池旧值写入undolog便于回滚更新内存数据写redo log到RedoBuffredo log顺序写入磁盘准备提交事务prepare阶段准备提交事务binlog写入磁盘写入commit标记到redo log文件里提交事务完成该标记为了保证事务提交后redo log和binlog数据一致系统空闲时随机写入磁盘以page为单位写入。
为什么MySQL不直接更新磁盘上的数据而设置这么一套复杂的机制来执行SQL
因为来一个请求就直接对磁盘文件进行随机读写然后更新磁盘文件里的数据性能可能相当差所以直接更新磁盘文件不能让数据库抗住高并发。
MySQL这套机制看起来复杂但他可以保证每个更新请求都是更新内存BufferPool然后顺序写日志文件同时还能保证各种异常情况下的数据一致性。
更新内存的性能是极高的然后顺序写磁盘上的日志文件的性能也是远高于随机读写磁盘文件的。
正是通过这套机制才能让MySQL在较高配置的机器上每秒可以抗下几千甚至上万的读写请求。
什么是redo log和binlog的2阶段提交
prepare阶段
这个阶段SQL已经执行并更新BufferPool内存数据生成redo log到redolog buff并开始顺序写入磁盘
binlog写入磁盘持久化
commit写入commit标记到redo log文件里提交事务完成
什么是WAL机制
先写redo log后刷新数据库文件的机制叫做WALWrite-Ahead Logging机制效率更高。