zoukankan      html  css  js  c++  java
  • innodb存储线程和缓冲池详解

    1.后台线程

    innodb存储引擎后台有10个进程,分别是:

    I/O thread 0 state: waiting for completed aio requests (insert buffer thread)
    I/O thread 1 state: waiting for completed aio requests (log thread)
    I/O thread 2 state: waiting for completed aio requests (read thread)
    I/O thread 3 state: waiting for completed aio requests (read thread)
    I/O thread 4 state: waiting for completed aio requests (read thread)
    I/O thread 5 state: waiting for completed aio requests (read thread)
    I/O thread 6 state: waiting for completed aio requests (write thread)
    I/O thread 7 state: waiting for completed aio requests (write thread)
    I/O thread 8 state: waiting for completed aio requests (write thread)
    I/O thread 9 state: waiting for completed aio requests (write thread)

    一个insert buffer thread,一个log thread,4个read thread,4个write thread

    2.内存缓冲池

      innodb内存主要由以下几个部分组成:缓冲池、重做日志缓冲池、额外的内存池。分别由innodb_buffer_pool_size和innodb_log_buffer_size大小决定。通过show engine innodb status命令可以查看当前缓冲池的使用情况:

    Total memory allocated 137363456; in additional pool allocated 0
    Dictionary memory allocated 33650
    Buffer pool size 8192
    Free buffers 8010
    Database pages 182

      innodb缓冲池单位是页,相当于oracle中的块,每页大小为16k。

      日志缓冲池:将重做日志信息先放入到这个缓冲区中,然后会按照一定频率将缓冲区内容刷新到日志文件中,由于一般一秒钟刷新一次,所以该值不需要设置太大,能够承担一秒钟的事物量即可。

    3.innodb定时的操作:

    每1秒的操作:

      日志缓冲刷新到磁盘,即使这个事物还没有提交(总是)

      合并插入缓冲(可能)

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

      如果当前没有用户活动,切换到background loop(可能)

    每10秒的操作:

      刷新100个InnoDB的缓冲池中的脏页到磁盘(可能)

      合并最多5个插入缓冲(总是)

      日志缓冲刷新到磁盘(总是)

      删除无用的Undo页(总是)

      刷新100个或10个脏页到磁盘(总是)

      产生一个检查点(总是)

    background loop循环:

      删除无用的Undo页(总是)

      合并20个插入缓冲(总是)

      跳回主循环(总是)

      不断刷新100个页,直到符合条件(可能)

    4.插入缓冲

      插入缓冲的名字会让大家误以为是缓冲池的一部分,其实不然,innodb缓冲池有insert buffer信息确实没错,但是insert buffer和数据页一样,也是物里页的一个组成部分。

      我么知道,主键是行唯一的标识符,在应用程序中行记录的插入顺序是按照主键递增的顺序进行插入的。因此,插入聚集索引一般是顺序的,不需要磁盘的随机读取,比如我们按照下面的sql语句定义表结构:

    create table t(id int auto_increment,name varchar(30),primary key(id));

      id列是自增长的,这就意味着当执行插入操作时,id列会自动增长,页中行记录按id执行顺序存放,一般情况下

      

    5.两次写

      

    你将来想成为什么样子,就一定会成为什么样子,只要你努力坚持的去做!!!
  • 相关阅读:
    PHP sessions that have already been started
    DOM对象和JQuery对象的区别
    iOS在支持arc的工程中,导入不支持arc的第三方的插件
    Android下利用RadioGroup和RadioButton实现Tabbar的效果
    iOS7.1以后企业应用发布需要HTTPS协议,解决步骤
    Scrapy基础(四)————Scrapy的使用Pycharm进行Debuge设置
    Scrapy基础(三) ------xpath基础
    Scrapy基础(二)————Scrapy的安装和目录结构
    python基础一 ------Python 的编码
    Scrapy基础(一) ------学习Scrapy之前所要了解的
  • 原文地址:https://www.cnblogs.com/kucha/p/4863812.html
Copyright © 2011-2022 走看看