Mysql InnoDB 存储引擎详解 介绍省了………………. 2.2 InnoDB体系架构 2.2 InnoDB体系架构 通过第 1章我们了解了 MySQL的体系结构,现在可能你想更深入地了解 InnoDB的架构模型。图 2-1简单显示了InnoDB的存储引擎的体系架构。InnoDB有多个内存块,你可以认为这些内存块组成了一个大的内存池,负责如下工作: q 维护所有进程/线程需要访问的多个内部数据结构。 q 缓存磁盘上的数据,方便快速地读取,并且在对磁盘文件的数据进行修改之前在这里缓存。 q 重做日志(redo log)缓冲。 „„ 图 2-1 InnoDB体系结构 后台线程的主要作用是负责刷新内存池中的数据,保证缓冲池中的内存缓存的是最近的数据。此外,将已修改的数据文件刷新到磁盘文件,同时保证在数据库发生异常情况下 InnoDB能恢复到正常运行状态。 2.2.1 后台线程 由于Oracle是多进程的架构(Windows下除外),因此可以通过一些很简单的命令来得知Oracle当前运行的后台进程,如 ipcs命令。一般来说,Oracle的核心后台进程有 CKPT、DBWn、LGWR、ARCn、PMON、SMON等。 很多 DBA问我,InnoDB存储引擎是否也是这样的架构,只不过是多线程版本的实现后,我决定去看InnoDB的源代码,发现 InnoDB并不是这样对数据库进程进行操作的。InnoDB存储引擎是在一个被称做 master thread的线程上几乎实现了所有的功能。 默认情况下,InnoDB存储引擎的后台线程有 7个—4个 IO thread,1个 master thread,1个锁(lock)监控线程,1个错误监控线程。IO thread的数量由配置文件中的 innodb_file_ io_threads参数控制,默认为 4,如下所示。 mysql> show engine innodb status\G; *************************** 1. row *************************** Type: InnoDB Name: Status: ===================================== 100719 21:34:03 INNODB MONITOR OUTPUT ===================================== Per second averages calculated from the last 50 seconds „„ -------- 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 (write thread) Pending normal aio rea...