MySQL - Innodb存储引擎整理

Posted 有我在

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL - Innodb存储引擎整理相关的知识,希望对你有一定的参考价值。

InnoDB体系架构

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

后台线程

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,分别是:writereadinsert bufferlog IO thread
在Linux平台下,IO Thread的数量不能进行调整,但是在Windows平台下可以通过参数innodb_file_io_threads来增大IO Thread。

从InnoDB 1.0.x版本开始,read threadwrite thread分别增大到了4个,并且不再使用innodb_file_io_threads参数,而是分别使用innodb_read_io_threadsinnodb_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 后台清理

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

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

调整线程数

mysqld --innodb-purge-threads=#

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

MySQL5.7启动参数说明地址

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     |
+------------------------------+-------+

以上是关于MySQL - Innodb存储引擎整理的主要内容,如果未能解决你的问题,请参考以下文章

Mysql 存储引擎中InnoDB与MyISAM差别(网络整理)

跳出初学MySQL知识的原理整理

跳出初学MySQL知识的原理整理

Mysql Innodb 表碎片整理

Mysql知识点整理

MySQL 温故而知新--Innodb存储引擎中的锁