MySQL数据更新

数据更新流程

MySQL数据更新_第1张图片

流程:

  1. 客户端发起请求,更新一条数据
  2. MySQL Server接受到客户端请求,向存储引擎调用查询该条需要更新的数据
  3. InnoDB存储引擎从磁盘中读取数据页写入内存中
  4. InnoDB从数据页中查出符合条件的行数据
  5. MySQL修改该行数据
  6. InnoDB写入反更新语句的undo log
  7. 更新内存中的数据页
  8. redo log写入内存
  9. 当客户端执行commit提交事务时
  10. MySQL Server的写bin log内存
  11. InnoDB 提交事务

加锁的流程

MySQL数据更新_第2张图片

注意:

bin log 和 redo log都是写入内存,可通过配置规定多久将内存中的日志落入磁盘中

redo log 可以通过修改innodb_flush_log_at_trx_commit参数配置讲redo log buffer写入磁盘中的时机

刷脏页

有时候Mysql会卡几秒不处理事务,而且磁盘IO很高,这个时候不是Mysql在进行垃圾回收,而是Mysql在刷脏页

什么是脏页

因为mysql的数据更新首先都是在内存中,所以就会导致内存中的数据与磁盘上的数据不一致,而内存中的数据页就是脏页。脏页的存在可以加快查询,且保证事务的数据隔离性

什么是刷脏

刷脏就是还要把内存中的数据页写到磁盘中,同时删除此页相关的redo log,推进check point

刷脏的时间点

  • 内存中的脏页太多时,内存不足
  • redo log写满了,需要推进check point
  • 系统空闲,提前刷脏,预防上述两种情况

你可能感兴趣的:(数据库,数据库,database)