回答
Buffer Pool 是 InnoDB 内存的一块缓存区,用于缓存表和索引数据。Buffer Pool 设计目标是提高磁盘 IO 效率,通过在内存中缓存数据页来减少磁盘读取和写入操作。它不仅加快了读取速度,还优化了写入性能。
默认情况,Buffer Pool 的数据页大小(page)和磁盘的页大小是一致的(16KB)。通过命令innodb_buffer_pool_size
查看buffer_pool
大小。
mysql> show variables like '%innodb_buffer_pool_size%';
+-------------------------+-----------+
| Variable_name | Value |
+-------------------------+-----------+
| innodb_buffer_pool_size | 134217728 |
+-------------------------+-----------+
再者,当客户端请求访问buffer_pool
某个页的数据时,InnoDB 引擎直接把完整的页数据加载到内存。即哪怕只需要访问一个页中的一条记录,存储引擎也是加载整个数据页到内存(buffer_pool
的单位是数据页)。
Buffer Pool 控制块
InnoDB 为每个缓存的数据页创建一个单独的区域,记录数据页的元数据信息,如数据页所属表空间、数据页编号、数据页在 Buffer Pool 的地址、链表节点信息、锁信息以及 LSN 信息等,这个区域称之为控制块。
Buffer Pool 数据页状态
Buffer Pool 中的数据页存在三种状态,空闲页、常规页、脏页(刷新页)。