mysql innodbpurgethreads_MySQL - Innodb存储引擎整理

InnoDB体系架构

efcda83c1b923299027ed31ea2a8f1ea.png

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

后台线程

900f2bdb8c11e6afc8440cdfb61b534f.png

1. Master Thread

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

2. IO Thread

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

IO Thread分类:

write io thread

read io thread

insert buffer io thread

log io thread

InnoDB 1.0版本之前共有4个IO Thread,分别是:write、read、insert buffer和log IO thread。

在Linux平台下,IO Thread的数量不能进行调整,但是在Windows平台下可以通过参数innodb_file_io_threads来增大IO Thread。

从InnoDB 1.0.x版本开始,read thread和write thread分别增大到了4个,并且不再使用innodb_file_io_threads参数,而是分别使用innodb_read_io_threads和innodb_write_io_threads参数进行设置,如:

Mysql语句

# 查看read io和write io线程数量

mysql> show variables like '%io_thread%';

+-------------------------+-------+

| Variable_name | Value |

+-------------------------+-------+

| innodb_read_io_threads | 4 |

| innodb_write_io_threads | 4 |

+-------------------------+-------+

# 查看Innodb状态信息

mysql> show engine innodb status\G;

3. Purge Thread 后台清理

事务被提交后,其所使用的undolog可能不再需要,因此需要Purge Thread来回收已经使用并分配的undo页。

InnoDB中delete所做删除只是标记为删除的状态,实际上并没有删除掉,因为MVCC机制的存在,要保留之前的版本为并发所使用。最终的删除由purge线程来决定的什么时候来真正删除文件的。

调整线程数

mysqld --innodb-purge-threads=#

cace05fe2ecb3be6a5d787182032c67f.png

639e05a540ec6c61c20670592a178da0.png

ps:Purge Thread默认每次清理大小为:300个page,可通过参数innodb_purge_batch_size调整。

4. Page Cleaner Thread

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

mysql> show variables like '%cleaner%';

+----------------------+-------+

| Variable_name | Value |

+----------------------+-------+

| innodb_page_cleaners | 1 |

+----------------------+-------+

# 查看缓冲池等待数据,如果数据过大则需要调整innodb_page_cleaners参数

mysql> show status like '%wait_free';

+------------------------------+-------+

| Variable_name | Value |

+------------------------------+-------+

| Innodb_buffer_pool_wait_free | 0 |

+------------------------------+-------+

233dbb75dea88d806a69633750485e70.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值