MySQL-InnoDB
体系架构:
内存池:
额外的内存池:维护所有进程/线程需要访问的多个内部数据结构 (对一些数据结构本身分配内存时,从这里申请,如果不够在缓冲池申请)
缓冲池:缓存磁盘上的数据,方便快速地读取,并在对磁盘文件的数据进行修改之在这里缓存
日志缓冲内存池:重做日志缓冲(容量不需要设的很大,一般来说一秒冲刷到日志文件)
后台线程:
4个IO thread(insert buffer thread, log thread, read thread,write thread),一个master thread, 一个锁监控线程,一个错误监控线程
master thread:主循环(loop)、后台循环(background loop)、刷新循环(flush loop)暂停循环(suspend loop)
loop:
每秒一次的操作包括:(1)日志冲刷到磁盘,即使这个事务还没有提交。(2)合并插入到缓冲(可能)(3)至多刷新100个InnoDB的缓冲池中的脏页到磁盘(当脏页的比例超过了配置文件中的阈值,则刷新100个脏页)(4)如果当前没有用户活动,切换到background loop
每10秒一次的操作包括:(1)刷新100个脏页到磁盘(先判断过去10秒之内磁盘的IO操作是否小于200次,如果是,将100个脏页刷新到磁盘)(2)合并至多5个插入缓冲(3)将日志冲刷到磁盘(4)删除无用的Undo页(5)刷新100个或者10个脏页到磁盘(如果脏页比例超过了配置文件中的阈值,刷出100页脏页,否则只需刷出10%的脏页到磁盘)(6)产生一个检查点(模糊检查点)
关键特性:
插入缓冲:对于非聚集索引的插入与更新操作,并不是每一个都直接插入到索引页中,而是利用插入缓冲来提高对非聚集索引执行插入和修改操作的性能。(满足条件:索引是辅助索引,索引不是唯一的)
如果插入的缓冲页在缓冲池中,则直接插入。否则,先放入一个插入缓存中,然后再以一定频率执行插入缓冲和非聚集索引页子节点的合并操作。这时能将多个插入合并到一个操作中,这就大大提高了对非聚集索引执行插入和修改操作的性能。
两次写:
自适应哈希索引:会自动根据访问的频率和模式来为某些页建立Hash索引。通过缓冲池的B+树构造而来
文件
日志文件:错误日志,二进制日志,慢查询日志,查询日志
错误日志:在遇到问题时,应该首先查看该文件,文件记录了出错信息,警告信息和正确信息

浙公网安备 33010602011771号