数据库小计

Mysql 的checkpoint

2022-02-26  本文已影响0人  祁小彬

1、Checkpoint作用

2、Checkpoint分类

sharp checkpoint
在关闭数据库的时候,将buffer pool中的脏页全部刷新到磁盘中。
fuzzy checkpoint
数据库正常运行时,在不同的时机,将部分脏页写入磁盘。仅部分刷新也是为了避免一次刷新全部的脏页造成的性能问题。

3、Fuzzy Checkpoint分类

3.1、Master Thread Checkpoint
在Master Thread中,会以每秒或者每10秒一次的频率,将部分脏页从内存中刷新到磁盘,这个过程是异步的。正常的用户线程对数据的操作不会被阻塞。

3.2、FLUSH_LRU_LIST Checkpoint
FLUSH_LRU_LIST Checkpoint 是在单独的 page cleaner 线程中执行的。MySQL 对缓存的管理是通过 buffer pool 中的 LRU 列表实现的,LRU 空闲列表中要保留一定数量的空闲页面,来保证 buffer pool 中有足够的空闲页面来相应外界对数据库的请求。当这个空间页面数量不足的时候,发生FLUSH_LRU_LIST checkpoint。空闲页的数量由innodb_lru_scan_depth参数表来控制的,因此在空闲列表页面数量少于配置的值的时候,会发生 checkpoint,剔除部分 LRU 列表尾端的页面。

3.3、Async / Sync Flush Checkpoint
Async / Sync Flush checkpoint 是在单独的 page cleaner 线程中执行的。Async / Sync Flush checkpoint 发生在重做日志不可用的时候,将 buffer pool 中的一部分脏页刷新到磁盘中。在脏页写入磁盘之后,事务对应的重做日志也就可以释放了。关于 redo_log 文件的的大小,可以通过innodb_log_file_size来配置。

对于是执行 Async Flush checkpoint 还是 Sync Flush checkpoint,由checkpoint_age、async_water_mark和sync_water_mark来决定:

即checkpoint_age等于 最新的lsn 减去 已经刷新到磁盘的lsn的值

checkpoint_age = redo_lsn - checkpoint_lsn

async_water_mark = 0.75 * innodb_log_file_size
sync_water_mark = 0.9 * innodb_log_file_size

上一篇下一篇

猜你喜欢

热点阅读