1、后台线程
主线程:核心后台线程,主要负责将缓冲中的数据异步刷新到磁盘,保证数据的一致性,包括脏页的刷新、合并插入缓冲(insert buffer)、UNDO页的回收等。
IO线程:为了提高数据库的性能,innodb采用AIO(async IO)来处理读写IO请求,主要有4类IO,read ,write,log,insert buffer。具体个数在不同版本也不形同,可通过以下命令查看:
purge线程:事物提交后,undolog可能不在需要,需要此线程来回收并分配undo页。1.2以上版本支持通过innodb_purge_threads来进行设置。
Page cleaner thread:1.2版本中引入,作用是将之前版本中的脏页刷新操作都放到单独的线程中来完成,以减轻Master Thread的工作负担。
2、内存
(1)缓冲池:InnoDB存储引擎是基于磁盘存储的,记录按照页的方式进行管理,使用缓冲池技术来提高数据库的整体性能,通过内存的速度来弥补磁盘速度较慢对数据库性能的影响。
在数据库中进行读操作时,先从磁盘读页放入缓冲池中(FIX),下一次再读相同的页时,首先判断是否在缓冲池中,如在,称该页在缓冲池中被命中,直接嘟嘟,否则都去磁盘中的页面。
对于数据库中页的修改操作,则首先修改在缓冲池中的页,然后以一定的频率刷新到磁盘中。
缓冲池的大小直接影响数据库的整体性能。对innodb来说,可通过'innodb_buffer_pool_size'进行设定。
缓冲池中缓存的数据主要有以下类型:
从1.0版本开始,为减少数据库内部资源竞争,增加数据库并发处理能力,允许配置多个缓冲池实例,每个页根据哈希值平均分配到不同缓冲池实例中。可通过配置文件设定参数‘innodb_buffer_pool_instances'即可。。
可通过以下命令查新每个缓冲池的使用状况。
select pool_id,pool_size,free_buffers, database_pages from innodb_buffer_pool_stats ;
(2)LRU list 、Free List和Flush List。
网友评论