zoukankan      html  css  js  c++  java
  • InnoDB存储引擎概述--概述

    后台线程

    作用

    刷新内存池数据,保证内存缓存的是最新的数据,将已修改的数据文件刷新到磁盘中,数据库发生异常时InnoDB能恢复至正常运行状态.

    Master Thread

    负责将缓冲池中的数据异步刷新到磁盘,保证数据的一致性,包括脏页的刷新,合并插入缓冲,UNDO页的回收.

    IO Thread

    Async IO处理IO请求,四种Thread: write, read, insert buffer, log IO thread, 可设置: innodb_read_io_threads, innodb_write_io_threads

    Purge Thread

    来回收已经使用并分配的undo页.

    Page Cleaner Thread

    脏页刷新的操作放在该线程中执行.

    内存

    缓冲池

    缓冲池大小可配: innodb_buffer_pool_size

    缓冲池个数可配: innodb_buffer_pool_instances

    LRU List, Free List, Flush List

    改进LRU算法,该算法为midpoint insertion strategy,默认midpoint的位于列表的5/8处,该位置可以通过innodb_old_blocks_pct控制.

    参数innodb_old_blocks_time表示页读取到mid位置后需要等待多久才会被加入到LRU的热端.

    脏页既存在于LRU list, Flush list中,LUR列表是用来管理页列表的可用性,而Flush列表是用来管理将页刷新回磁盘,两者互不影响.

    重做日志缓冲池:可配置参数innodb_log_buffer_size,默认为8MB,以下三种将缓存池内容刷新到磁盘中的情况:

    1) Master Thread每一秒将重做日志缓冲刷新到重做日志中;

    2) 每个事务提交时会将重做日志缓冲刷新到重做日志中;

    3) 当重做日志缓冲池剩余空间小于1/2时,重做日志缓冲刷新到重做日志中.

    Checkpoint技术

    两种Checkpoint: Sharp Checkpoint(数据库关闭时将所有脏页刷新会磁盘), Fuzzy Checkpoint.

    Fuzzy Checkpoint有以下几种:

    Master Thread Checkpoint

    FULSH_LRU_LIST Checkpoint

    Async/Sync Flush Checkpoint

    Dirty Page too much Checkpoint

    Master Thread的工作方式

    内部分为多个loop: loop, background loop, flush loop, suspend loop;

    loop

    每秒操作:

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

    合并插入缓冲(可能);

    至多刷新100个脏页到磁盘(可能);

    若当前无用户活动,切换到background loop.

    每10秒操作:

    刷新100个脏页到磁盘;(可能)

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

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

    删除无用的undo页;(总是)

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

    background loop

    删除无用的undo页(总是);

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

    跳出主循环(总是);

    不断刷新100个页直到符合条件(可能,跳转到flush loop完成).

    1.2.x前增加可选项

    innodb_io_capacity

    innodb_max_dirty_pages_pct

    innodb_adaptive_flushing

    innodb_purge_batch_size

    1.2.x后改进

    Master Thread伪代码:

    从Master Thread中分离出刷新脏页的操作至一个单独的Page Cleaner Thread.

    InnoDB关键特性

    Insert Buffer

    适用对象:  非唯一的辅助索引

    内部实现:  B+树

    Insert/Change Buffer

    Double Write

    Adaptive Hash Index(AHI)

    AHI有一个要求:对这个页的连续访问模式必须是一样的

    Async IO

    Flush Neighbor Page

  • 相关阅读:
    文件操作
    通过类型断言获取error类型,获得更详细的信息

    数组
    使用unsafe改善性能
    使用unsafe.Pointer将结构体转为[]byte
    (GoRails)链接link_to到当前页current Page 并使用参数 (类ActionController::Parameters)
    用ActionController::Renderer的render方法渲染模版
    innerHTML用法及错误:无法设置未定义或null引用的属性“innerHTML”解决
    ActionCable的部署(参考Gorails)
  • 原文地址:https://www.cnblogs.com/cheungchein/p/8706195.html
Copyright © 2011-2022 走看看