阅读innodb_buffer_pool相关文档

This commit is contained in:
asahi
2024-11-20 13:30:21 +08:00
parent ce92d62bdf
commit 785b694479

View File

@@ -57,7 +57,7 @@ innodb存储引擎是基于磁盘存储的并将记录基于页的方式进
> >
> 缓冲池刷新页到磁盘中的操作由checkpoint机制进行触发并不会在每次更新缓冲池中的页数据后立马触发。 > 缓冲池刷新页到磁盘中的操作由checkpoint机制进行触发并不会在每次更新缓冲池中的页数据后立马触发。
#### 缓冲池参数配置 ### 缓冲池参数配置
对于innodb其缓冲池大小通过`innodb_buffer_pool_size`来配置。默认情况下,`innodb_buffer_pool_size`大小为128M. 对于innodb其缓冲池大小通过`innodb_buffer_pool_size`来配置。默认情况下,`innodb_buffer_pool_size`大小为128M.
```sql ```sql
@@ -66,3 +66,34 @@ show variables like 'innodb_buffer_pool_size'
|Variable_name|Value| |Variable_name|Value|
|-------------|-----| |-------------|-----|
|innodb_buffer_pool_size|134217728| |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将会被自动调整到10G10G是2G的整数倍