zoukankan      html  css  js  c++  java
  • InnoDB后台线程

      后台线程的主要作用是负责刷新内存池中的数据,保证缓存中的内存缓存的是最近的数据。此外将已修改的数据文件刷新到磁盘文件,同时保证在数据库发生异常的情况下InnoDB能恢复到正常运行状态。

      InnoDB存储引擎是多线程的模型,有多个不同的后台线程,负责处理不同的任务。

      mysql> show variables like 'innodb_version'G  查看引擎版本

      1、Master Thread

      Master Thread 是非常核心的后台线程,主要负责将缓冲池中的数据异步刷新到磁盘,保证数据的一致性,包括脏页的刷新、合并插入缓冲(INSERT BUFFER)、UNDO页的回收等。

      2、IO Thread

      在InnoDB存储引擎中大量使用了AIO(Async IO)来处理写IO请求,这样可以极大提高数据库的性能。而IO Thread 的工作主要是负责这些IO请求的回调(call back)处理。

      查看IO线程参数有 innodb_read_io_threads 及 innodb_write_io_threads 来设置读写线程:

    mysql> 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.00 sec)

      通过命令show engine innodb status来观察InnoDB中的IO hread:

    mysql> show engine innodb statusG
    
    *************************** 1. row ***************************
      Type: InnoDB
      Name:
    Status:
    =====================================
    。。。。。。。
    --------
    FILE I/O
    --------
    I/O thread 0 state: waiting for i/o request (insert buffer thread)
    I/O thread 1 state: waiting for i/o request (log thread)
    I/O thread 2 state: waiting for i/o request (read thread)
    I/O thread 3 state: waiting for i/o request (read thread)
    I/O thread 4 state: waiting for i/o request (read thread)
    I/O thread 5 state: waiting for i/o request (read thread)
    I/O thread 6 state: waiting for i/o request (write thread)
    I/O thread 7 state: waiting for i/o request (write thread)
    I/O thread 8 state: waiting for i/o request (write thread)
    I/O thread 9 state: waiting for i/o request (write thread)
    Pending normal aio reads: 0 [0, 0, 0, 0] , aio writes: 0 [0, 0, 0, 0] ,
     ibuf aio reads: 0, log i/o's: 0, sync i/o's: 0
    Pending flushes (fsync) log: 0; buffer pool: 0
    425008825 OS file reads, 356489210 OS file writes, 265709650 OS fsyncs
    0.05 reads/s, 16384 avg bytes/read, 100.60 writes/s, 62.48 fsyncs/s
    -------------------------------------
    INSERT BUFFER AND ADAPTIVE HASH INDEX
    -------------------------------------
    

      其中I/O thread 0 为 insert buffer thread。I/O thread 1 为 log thread 。后面就是根据参数innodb_read_io_threads 及 innodb_write_io_threads 来设置的读写线程。并且读线程的ID总是小于写线程ID。

      3、Purge Thread

      InnoDB 1.2版本 purge操作可以独立到单独线程进行,来减轻Master Thread的工作,提高CPU的使用率及提升存储引擎性能。还可以支持多个 Purge Thread.可以加快 undo页回收。同时 Purge Thread 需要离散地读取 undo 页,这样能更进一步利用磁盘的随机读取性能。

    mysql> show variables like 'innodb_purge%'G
    *************************** 1. row ***************************
    Variable_name: innodb_purge_batch_size
            Value: 300
    *************************** 2. row ***************************
    Variable_name: innodb_purge_threads
            Value: 1
    2 rows in set (0.01 sec)

      其中参数  innodb_purge_threads 为开启的Purge Thread数量,innodb_purge_batch_size 为 设置每次purge清理的undo页数,如果值太大则会导致CPU和磁盘IO过于集中(参考:https://www.cnblogs.com/suolu/p/6634592.html)

      4、Page Cleaner Thread

      Page Cleaner Thread 是在InnoDB 1.2.x 版本中引入的,作用是将之前版本中脏页的刷新操作都放入到单独的线程中来完成。以减轻原Master Thread 的工作及对用户查询线程的阻塞,进一步提高 InnoDB 存储引擎的性能。

  • 相关阅读:
    Java实现 蓝桥杯 算法训练 Number Challenge(暴力)
    Java实现 蓝桥杯 算法训练 Number Challenge(暴力)
    Java实现 蓝桥杯 算法训练 Number Challenge(暴力)
    Java实现 蓝桥杯 算法训练 Rotatable Number(暴力)
    Java实现 蓝桥杯 算法训练 Rotatable Number(暴力)
    Java实现 蓝桥杯 算法训练 Rotatable Number(暴力)
    Java实现 蓝桥杯 算法训练 猴子吃包子(暴力)
    Java实现 蓝桥杯 算法训练 猴子吃包子(暴力)
    Java实现 蓝桥杯 算法训练 猴子吃包子(暴力)
    Python位运算符
  • 原文地址:https://www.cnblogs.com/uphold/p/12188274.html
Copyright © 2011-2022 走看看