阅读buffer pool flush文档
This commit is contained in:
@@ -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`。
|
||||
|
||||
|
||||
Reference in New Issue
Block a user