InnoDB存储引擎后台线程与内存池


InnoDB完整支持ACID事务、行锁设计、支持MVCC、提供一致性非锁定读、支持外键->事务安全,适合OLTP应用(在线事务处理)。
Mytrix.,Inc.在InnoDB上存储超过1TB的数据,还有一些其他站点在InnoDB上处理平均每次800插入/更新操作->证明InnoDB是一个高性能、高可用、高可扩展性的存储引擎。
事务ACID:
atomicity原子性:事务commit提交或rollback回滚
consistency一致性:事务发生前后完整性约束不被破坏
isolation隔离性:两个事务互不干扰(即一个事务不可能看到其他事务中间时刻数据)
durability持久性:更改持久(commit后不发生rollback)

InnoDB体系结构如下:

其中:
后台线程,负责:
刷新内存池中的数据;
将已修改的数据文件刷新到磁盘文件中;
保证数据库发生异常情况下InnoDB能恢复到正常运行状态。
默认情况下,后台线程有7个:
1个master thread;
4个IO thread(insert buffer、log、read、write)->可通过配置文件中的innodb_file_io_threads参数进行修改,在mysql5.5以及innodb plugin版本中,默认IO线程均增加到了4个,读写线程分别用参数innodb_read_io_thread和innodb_write_io_thread来表示;
1个lock锁监控线程;
1个error错误监控线程。
内存池,由多个内存块组成一个大的内存池,负责:
维护所有进程/线程需要访问的多个内存数据结构;
缓存磁盘上的数据,方便快速读取,并且在对磁盘文件的数据进行修改之前在这缓存;
重做日志缓冲;
……

内存池结构如下:

其中:
buffer pool缓冲池:包括data page数据页、index page索引页、插入缓冲、锁信息、自适应哈希索引、数据字典信息;
redo log buffer重做日志缓冲池:每秒产生的事务量在这个缓冲大小之内;
additional memory buffer额外的内存池:每个缓冲池中的帧缓冲还有对应的缓冲控制对象,如LRU、锁等待等。
InnoDB的工作方式是将数据文件按页(每页16K)读取到缓冲池,然后按LRU最近最少使用算法来保留在缓冲池中的缓存数据;如果文件需要修改,总是首先修改在缓冲池中的页(发生修改后,该页即为脏页),然后按照一定的频率将脏页flush刷新到文件。

参考:<MySQL技术内幕 InnoDB存储引擎>

  • 1
  • 2
  • 下一页

相关内容