InnoDB 存储引擎

后台线程:

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

Master Thread:

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

IO Thread:

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

Purge Thread:

事务被提交后,其所使用的undolog可能不再需要,因此需要PurgeThread来回收已经使用并分配的undo页。在InnoDB 1.1之前,purge 操作仅在InnoDB存储引擎的Master Thread 中完成。而从InnoDB 1.1开始,purge操作可以独立到单独的线程中进行,以此来减轻Master Thread的工作,从而提高CPU的使用率以及提升存储引擎的性能。用户可以在MySQL数据库的配置文件中添加如下命令来启用独立的Purge thread:

[mysqld]

innodb_purge_threads=1

Purge Cleaner Thread:

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

脏页:

当高速缓存中的数据比后台数据更新时,那么该数据被称为脏数据。

缓冲池:

简单的来说就是一块内存区域,通过内存的速度来弥补磁盘速度较慢对数据库性能的影响。在数据库中进行读取页的操作,首先将从磁盘中读到的页存放在缓冲池中,这个过程称为将页“Fix”在缓冲池中。下一次再读相同的页时,首先判断该页是否在缓冲池中。若在,称该页在缓冲池中被命中,直接读取该页。否则,读取磁盘上的页。

对于数据库中页的修改操作,首先,修改缓冲池中的页,然后再以一定的频率刷新到磁盘上。这里需要注意的是,页从缓冲池中刷新到磁盘的操作并不是在每次页发生更新时触发,而是通过一种称为Checkpoint的机制刷新回磁盘。这也是为了提高数据库的整体性能。

 

posted @ 2019-05-05 14:45  Victor!!!!  阅读(129)  评论(0)    收藏  举报