From 785b694479d58ae2293bd4e1d09986f34a7c5eef Mon Sep 17 00:00:00 2001 From: asahi Date: Wed, 20 Nov 2024 13:30:21 +0800 Subject: [PATCH] =?UTF-8?q?=E9=98=85=E8=AF=BBinnodb=5Fbuffer=5Fpool?= =?UTF-8?q?=E7=9B=B8=E5=85=B3=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mysql/mysql文档/innodb体系结构.md | 33 ++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/mysql/mysql文档/innodb体系结构.md b/mysql/mysql文档/innodb体系结构.md index c4d7907..acb62fb 100644 --- a/mysql/mysql文档/innodb体系结构.md +++ b/mysql/mysql文档/innodb体系结构.md @@ -57,7 +57,7 @@ innodb存储引擎是基于磁盘存储的,并将记录基于页的方式进 > > 缓冲池刷新页到磁盘中的操作,由checkpoint机制进行触发,并不会在每次更新缓冲池中的页数据后立马触发。 -#### 缓冲池参数配置 +### 缓冲池参数配置 对于innodb,其缓冲池大小通过`innodb_buffer_pool_size`来配置。默认情况下,`innodb_buffer_pool_size`大小为128M. ```sql @@ -66,3 +66,34 @@ show variables like 'innodb_buffer_pool_size' |Variable_name|Value| |-------------|-----| |innodb_buffer_pool_size|134217728| + +缓冲池中缓存的数据页类型如下: +- 索引页 +- 数据页 +- 插入缓冲(insert buffer) +- 自适应哈希索引 +- innodb存储的锁信息 +- 数据字典信息 + +在mysql 8中,innodb可以支持多个缓冲池实例,每个页根据hash值不同被散列到不同缓冲池实例中,这样可以提高应用的并发能力。 + +缓冲池实例数量可以通过`innodb_buffer_pool_instances`变量来进行设置,该变量默认值为1. + +#### innodb_buffer_pool_size +当修改`innodb_buffer_pool_size`时,操作将会在chunk上执行。chunk size通过`innodb_buffer_pool_chunk_size`来配置。 + +令`M = innodb_buffer_pool_chunk size * innodb_buffer_pool_instances` + +`innodb_buffer_pool_size`必须等于`M`或是`M`的整数倍。如果`innodb_buffer_pool_size`不等于M且不是M的整数倍,那么`innodb_buffer_pool_size`将会被自动调整到等于M或是M的整数倍。 + +> #### 设置innodb_buffer_pool_size示例 +> `innodb_buffer_pool_chunk_size`其默认大小为128M,如果将`innodb_buffer_pool_instances`调整为16,那么`M`值为`128M * 16 = 2G`. +> +> ##### 将innodb_buffer_pool_size设置为8G +> 由于`8G = 2G * 4`,那么8G是2G的整数倍,此时该innodb_buffer_pool_size有效 +> +> ##### 将innodb_buffer_pool_size设置为9G +> 由于9G不是2G的整数倍,那么innodb_buffer_pool_size将会被自动调整到10G,10G是2G的整数倍 + + +