• 【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

  • 相关阅读:
    mysql5.7安装
    win10 安装docker
    快速去水印(win10换图3D工具)
    爬虫---国家食品药品监督管理总局
    食品伙伴网爬虫
    驴妈妈旅游爬虫
    天气预测(CNN)
    ConcurrentDictionary线程不安全么,你难道没疑惑,你难道弄懂了么?
    C#线程篇---线程池如何管理线程(6完结篇)
    C#线程篇---Task(任务)和线程池不得不说的秘密(5)
  • 原文地址:https://www.cnblogs.com/Ryan16231112/p/12672612.html
Copyright © 2020-2023  润新知