阅读buffer pool flush文档

This commit is contained in:
asahi
2024-12-03 12:49:14 +08:00
parent 864e4a3f43
commit 1e3a90a430

View File

@@ -253,3 +253,32 @@ sync_water_mark = 0.9 * total_redo_log_file_size
`sync/async flush checkpoint`操作同样放入到了page cleaner线程中不会阻塞用户操作
> redo异步刷新的水位线为`0.75`,同步刷新的水位线为`0.9`
>
> 当`redo_lsn - checkpoint`的大小超过异步或同步水位线时,会把足够的脏页刷新到磁盘中,刷新后满足`redo_lsn - checkpoint < async_water_mark`
#### Dirty Page too Much
如果buffer中存在的脏页数量过多那么会触发innodb强制进行脏页刷新将脏页刷新到磁盘。
## Buffer pool刷新
innodb会在后台将脏页刷新到磁盘中。在innodb中buffer pool刷新由page cleaner thread来执行。
> ### page cleaner threads
> page cleaner threads的数量由`innodb_page_cleaners`变量来控制,该变量存在默认值,默认值为`innodb_buffer_pool_instances`的值。
### innodb_max_dirty_pages_pct_lwm
当buffer pool中的脏页比例达到`innodb_max_dirty_pages_pct`的百分比时将会触发buffer pool刷新操作。
`innodb_max_dirty_pages_pct_lwm`的默认值为`10%`如果将该变量的值设置为0那么将会禁用该刷新行为。
当配置`innodb_max_dirty_pages_pct_lwm`变量时,应该确保该变量的值小于`innodb_max_dirty_pages_pct`的值。
### innodb_lru_scan_depth
`innodb_lru_scan_depth`该变量制定了每个缓冲池实例中page cleaner在扫描lru列表时待刷新脏页的深度。该后台操作由page cleaner thread每秒执行一次。
> 若增加`innodb_lru_scan_depth`的值在用户线程IO的基础上会额外增加IO的负载。只有在工作负载之外存在空闲IO容量时才考虑增加该变量的值。
>
> 如果工作负载已经令IO容量饱和那么可以考虑减少`innodb_lru_scan_depth`的大小。
>
> `该变量默认值大小为1024`。