zoukankan      html  css  js  c++  java
  • InnoDB 存储引擎的线程与内存池

    InnoDB体系结构如下:

     

    后台线程:

    1、后台线程的主要作用是负责刷新内存池中的数据,保证缓冲池中的内存缓存的是最近的数据;

    2、另外,将以修改的数据文件刷新到磁盘文件;

    3、同时,保证在数据库发生异常的情况下,InnoDB能恢复到正常运行状态。

    内存池:InnoDB有多个内存块,这些内存块组成了一个大的内存池。这些内存块包括有:缓冲池(innodb_buffer_pool)和日志缓冲(log_buffer)以及额外内存池(innodb_addtional_mem_pool_size

     


    后台线程:后台默认的线程有7-----4IO thread,1master thread,1个锁监控线程,1个错误监控线程,但是在mysql5.5以及innodb plugin版本中,默认IO线程均增加到了4个,读写线程分别用参数innodb_read_io_threadinnodb_write_io_thread来表示。

     

    Mysql5.1 innodb_version 1.0.7 

    可以看到有1Insert buffer thread 1log thread4read thread4write thread

     

    或者直接通过查看变量 ‘innodb_%threads’来查看。

     

    Mysql5.5 innodb_version 1.1.8

     

    Mysql5.5 innodb的线程和Innodb plugin的情况类似。

     


    Master thread在主循环中,分两大部分操作:每秒钟的操作和每10秒钟的操作:

    每秒一次的操作包括

    1、日志缓冲刷新到磁盘,即使这个事务还没有提交(总是),这点解释了为什么再大的事务commit时都很快!

    2、合并插入缓冲(可能)

    合并插入并不是每秒都发生,InnoDB会判断当前一秒内发生的IO次数是否小于5,如果是,则系统认为当前的IO压力很小,可以执行合并插入缓冲的操作。

    3、至多刷新100InnoDB的缓冲池的脏页到磁盘(可能)

    这个,刷新100个脏页也不是每秒都在做

    10秒一次的操作包括:

    1、刷新100个脏页到磁盘(可能)。

    2、合并至多5个插入缓冲(总是)。

    3、将日志缓冲刷新到磁盘(总是)。

    4、删除无用的undo页(总是)。

    5、产生一个检查点(checkpoing

  • 相关阅读:
    Django 初探--Django的开发服务器及创建数据库(笔记)
    Django初探--开发环境搭建(笔记)
    python文件处理--笔记
    python-property、docstring--笔记
    python之Lambda函数---笔记
    参数拆分-- 笔记
    python—带形状的词云图
    python—压缩文件
    python—dataframe用法
    python—mysql数据库读取表1获取name作为参数,传入访问表2获取age,结果存入excel
  • 原文地址:https://www.cnblogs.com/benshan/p/2855926.html
Copyright © 2011-2022 走看看