MySQL InnoDB存储引擎(二):架构
前一篇文章主要讲述MySQL的InnoDB存储引擎的基础,特性,优势等,本文主要聚焦于InnoDB的架构设计,对其内部的主要组件作相应介绍。
缓冲区(Buffer Pool)缓冲区是InnoDB用于缓存表和索引数据的一块主内存区,对于频繁访问的数据,可以直接从该缓冲区获取。对于专用的数据库服务器,通常可以分配80%的物理内存用于该缓冲区。为了提升大批量读操作的性能,缓冲区会被分为多个数据页,每页包含了多行记录。为了提升缓存管理的性能,缓冲区由链表页组成;对于很少访问的数据,将基于LRU算法,从缓冲区中清除。关于InnoDB Buffer Pool的细节,可见这里。
更新缓冲区(Change Buffer)更新缓冲区是一种特殊的数据结构。当相关页不在缓冲区里时,更新缓冲区可用于缓存二级索引页的变化。缓冲区的变化可由INSERT,UPDATE,DELETE等DML语句引起,随后当页面被加载进缓冲区后,这些变化将与其他读操作进行合并。
不像聚簇索引,二级索引通常并不是唯一的,并且插入二级索引时,会以相对随机的顺序。类似地,删除或更新操作可能会影响位于索引树不相邻的二级索引页。当相关页被...阅读全文
缓冲区(Buffer Pool)缓冲区是InnoDB用于缓存表和索引数据的一块主内存区,对于频繁访问的数据,可以直接从该缓冲区获取。对于专用的数据库服务器,通常可以分配80%的物理内存用于该缓冲区。为了提升大批量读操作的性能,缓冲区会被分为多个数据页,每页包含了多行记录。为了提升缓存管理的性能,缓冲区由链表页组成;对于很少访问的数据,将基于LRU算法,从缓冲区中清除。关于InnoDB Buffer Pool的细节,可见这里。
更新缓冲区(Change Buffer)更新缓冲区是一种特殊的数据结构。当相关页不在缓冲区里时,更新缓冲区可用于缓存二级索引页的变化。缓冲区的变化可由INSERT,UPDATE,DELETE等DML语句引起,随后当页面被加载进缓冲区后,这些变化将与其他读操作进行合并。
不像聚簇索引,二级索引通常并不是唯一的,并且插入二级索引时,会以相对随机的顺序。类似地,删除或更新操作可能会影响位于索引树不相邻的二级索引页。当相关页被...阅读全文