zoukankan      html  css  js  c++  java
  • 23 | MySQL是怎么保证数据不丢的?

    bin_log的写入机制

    binlog 的写入逻辑比较简单:

    事务执行过程中,先把日志写到 binlog cache,事务提交的时候,再把 binlog cache 写到 binlog 文件中。

    一个事务的 binlog 是不能被拆开的,因此不论这个事务多大,也要确保一次性写入。

    这就涉及到了 binlog cache 的保存问题。

    系统给 binlog cache 分配了一片内存,每个线程一个,参数 binlog_cache_size 用于控制单个线程内 binlog cache 所占内存的大小。

    如果超过了这个参数规定的大小,就要暂存到磁盘。

    事务提交的时候,执行器把 binlog cache 里的完整事务写入到 binlog 中,并清空 binlog cache。

    每个线程有自己 binlog cache,但是共用同一份 binlog 文件。

    图中的 write,指的就是指把日志写入到文件系统的 page cache,并没有把数据持久化到磁盘,所以速度比较快。

    图中的 fsync,才是将数据持久化到磁盘的操作。一般情况下,我们认为 fsync 才占磁盘的 IOPS。

    redo_log的写入机制

     

  • 相关阅读:
    [置顶] 十年博客行
    计算机编程语言年史
    初步认知MySQL metadata lock(MDL)
    Oracle语句优化规则(二)
    正则表达式
    sql server中的 SET NOCOUNT ON 的含义
    SQO (标准查询运算符)方法 & Linq To Object
    C# 扩展
    特性
    C#之泛型
  • 原文地址:https://www.cnblogs.com/lakeslove/p/12266115.html
Copyright © 2011-2022 走看看