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 存储引擎的性能。

  • 相关阅读:
    mysql 无法连接提示 Authentication plugin 'caching_sha2_password' cannot be loaded
    探究分析:快速对大量的数据转换为数组
    SQL Server like 字段
    InfluxDB从原理到实战
    Python学习日记(四十) Mysql数据库篇 八
    MySQL数据库基本操作
    ES入门宝典(详细截图版)
    NameNode && Secondary NameNode工作机制
    MySQL 两张表关联更新(用一个表的数据更新另一个表的数据)
    mysql单个表拆分成多个表
  • 原文地址:https://www.cnblogs.com/uphold/p/12188274.html
Copyright © 2011-2022 走看看