2024-11-09  阅读(2)
版权声明:本文为博主付费文章,严禁任何形式的转载和摘抄,维权必究。 本文链接:https://www.skjava.com/mianshi/baodian/detail/8676998527

回答

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 中的数据页存在三种状态,空闲页、常规页、脏页(刷新页)。