• INNODB引擎概述


    INNODB存储引擎的历史概述:

    INNODB存储引擎是OLTP应用中核心表的首选存储引擎。

    INNODB存储引擎包含在所有mysql数据库的二进制发行版本中。早期其版本随着mysql数据库的更新而更新。

    从mysql5.1开始,mysql数据库允许存储引擎开发商以动态形式加载引擎,这样存储引擎的更新可以不受mysql数据库版本的限制。

    mysql5.1中,可以支持两个版本的INNODB,一个是静态编译的INNODB版本,可以将其看作老版本的INNODB,另外一个是动态加载的INNODB版本,官方称为INNODB plugin,或者INNODB1.0.

    mysqk5.5又将INNODB版本升级到了1.1x

    mysql5.6又将其升级到了1.2x

    各版本之间的比较

    老版本的INNODB:    支持ACID,行锁设计, MVCC
    INNODB1.0x        继承了上述版本的所有功能,增加了compress和dynamic页格式
    INNODB1.1x        继承了上述版本的所有功能,增加了linux AIO,多回滚段
    INNODB 1.2x       继承了上述版本的所有功能,增加了全文索引支持,在线索引添加

    INNODB的后台线程:

    INNODB的后台线程主要作用:刷新内存池中的数据,保证缓冲池中的内存缓存的是最近的数据。 其二:将已修改的数据文件刷新到磁盘文件,同时保证数据库发生异常的情况下INNODB能恢复到正常状态。

    INNODB存储引擎是多线程模型,后台有许多不同的后台线程。

    1:Master Thread

    是一个非常核心的后台线程,主要负责将缓冲池中的数据异步刷新到磁盘,保证数据的一致性。

    2:Io Thread

    在INNODB存储引擎中大量使用了AIO(异步IO)来处理IO请求,这样可以大大提高数据库的性能。

    有四种IO Thread分别为: read, write, insert buffer和log IO thread。

    默认情况下read thred和write thread分别为4个:

    MariaDB [(none)]> show engine innodb statusG
    
    --------
    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)

    如上读线程的id总是小于写线程的id。

    读写线程的个数可以通过如下两个参数控制:

    MariaDB [(none)]> show variables like "innodb_%io_threads"G
    *************************** 1. row ***************************
    Variable_name: innodb_read_io_threads
            Value: 4
    *************************** 2. row ***************************
    Variable_name: innodb_write_io_threads
            Value: 4
    2 rows in set (0.01 sec)
    
    MariaDB [(none)]>

    3: Purge Thread

    事务被提交之后,其所使用的的undo log可能不再需要,因此需要使用Purge thread来回收已经使用并分配的undo页。在innodb1.1之前,purge仅在master thread中完成。innodb1.1之后可以用一个单独的线程来完成。

    innodb_purge_threads=1         #可以在配置文件中指定

    #在innodb1.2之后其参数的值可以设置为大于1,可以启动多个purge thread线程

    4:Page Cleaner Thread

    在innodb1.2版本之后引入的,作用是将之前版本中脏页刷新操作放入单独的线程,减轻master thread的负担。

    参考书籍【MySQL 技术内幕 --innodb存储引擎】

  • 相关阅读:
    Windows 服务多语言化时读取配置文件失败的问题。
    从开始界面卸载Windows服务时,不小心点击了 取消,此后再次卸载会卸载不掉
    从数据库导出数据时,有的字段是时间,不同的时间向在窗口中去掉时用正则表达式匹配找到不同的时间
    C#使用ManagementObjectSearcher来获取系统信息时会有out of memory的异常
    C# TreeView设置SelectedNode设置无效的问题
    C#判断ListBox是否显示了水平滚动条/横向滚动条
    Jmeter运行不显示cmd对话框
    监控Linux系统所选的服务所占进程内存占用
    Linux的date用法
    shell的循环嵌套语法
  • 原文地址:https://www.cnblogs.com/wxzhe/p/8876573.html
Copyright © 2020-2023  润新知