• 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.两次写

      

    你将来想成为什么样子,就一定会成为什么样子,只要你努力坚持的去做!!!
  • 相关阅读:
    语义化单单的限定在html么?
    转WEB前端开发经验总结(5)
    JavaScript中的null和undefined
    文字上右下环绕广告的写法
    转自森林:最新CSS兼容方案
    转自森林:注释书写规范 Ghost
    【探讨】栈和队列
    转自森林:你是一个职业的页面重构工作者吗?
    Web标准:IE8新特性及IE8安装使用
    转载:09年腾讯校园招聘页面重构的2道面试题
  • 原文地址:https://www.cnblogs.com/kucha/p/4863812.html
Copyright © 2020-2023  润新知