For example, the client sends a DML, which is first changed on the page in the Buufer Pool, which will cause a problem. The "version" of the data in the Buufer Pool is "newer" than the data in the disk, and we must use the disk as the "version". The data in the Buffer Pool shall prevail (the final data will also be written to the disk), so the page in the Buffer Pool at this time is called "dirty page (dirty page)"
If the page does not exist in the buffer pool, the normal query route (parser, optimizer) is taken, the "result page" is placed in the LRU list of the buffer pool, and then the page is changed. Then flush it to disk.
Checkpoint can be regarded as a kind of "pointer", the main function is to flush the dirty pages in the buffer pool to the disk, the difference is how much is flushed to the disk. The version is marked by LSN (Log Sequence Number) in InnoDB. The LSN is 8 bytes, that is, 32 bits, and each page is 16KB by default, so 2^32 * 16KB=64TB, which explains that InnoDB has the largest single table size is 64TB.
其目的是保证缓冲池中有足够多的可用页,其参数由 innodb_max_dirty_pages_pct 控制。