zoukankan      html  css  js  c++  java
  • 【MySQL】InnoDB后台线程与内存缓存池

    InnoDB有多个内存块组成的内存池,负责如下工作:

    • 维护进程、线程内部数据结构

    • 缓存磁盘上数据

    后台线程的作用是刷新内存池中的数据,保证缓冲池中缓存是最新的数据。将已修改的数据文件刷新到磁盘文件。保证在数据库发生异常时可以恢复到正常状态。

    后台线程

    Master Thread

    负责将缓冲池中数据异步刷新到次哦按,保证数据的一致性。

    IO Thread

    负责处理IO请求的回调处理。分别是write、read、insert buffer和log IO Thread。

    Purge Thread

    事务被提交之后,undolog不再需要,用这个线程来回收已经使用的undo页。

    Page Cleaner Thread

    将脏页的刷新放入单独的线程中。

    内存

    缓冲池

    和分页内存比较像,读时复制,修改时在内存中改,以一定频率写回磁盘。

    允许有多个缓冲池示例,根据哈希值品均分配到不同的示例中。

    用LRU算法管理。新页放到37%的位置。然后但再次读到时如果时间差超过了设置的值,会放到表头。

    Checkpoint

    • Sharp Checkpoint 数据库关闭时将所有的脏数据刷新会磁盘。

    • Fuzzy Checkpoint 只刷新一部分脏页

      • Master Thread中发生的Checkpoint,每秒或每十秒刷新一定比例的页回磁盘

      • FLUSH_LRU_LIST,为了保证LRU表中有100个空闲也左右可供使用,将LRU尾部的脏数据进行移除。

      • Async/Sync Flush,在重做日志文件不可用时刷新一些页回磁盘。

      • Dirty Page Too Much

  • 相关阅读:
    eclipse springboot运行helloworld错误: 找不到或无法加载主类 xxx.xxx.xxx
    springboot整合quartz并持久化到数据库
    pssh批量管理服务器
    网络拓扑图练习
    网络设备之ospf2
    网络设备之基础配置命令(华为交换机二三层)
    华为交换机配置静态路由
    docker参考文档
    docker系列之镜像服务器
    docker系列之分区挂载和数据卷
  • 原文地址:https://www.cnblogs.com/Ryan16231112/p/12672612.html
Copyright © 2011-2022 走看看