The checkpoint has to stop at that point because otherwise it might overwrite part of the database file that the reader is actively using.
In other words, a process can interact with a WAL database without using shared memory if that process is guaranteed to be the only process accessing the database. An exclusive lock is held during recovery. Usually, the WAL file is deleted automatically when the last connection to the database closes.
Hence it is of no use while recovering the data. If the last connection to a database crashed, then the first new connection to open the database will start a recovery process. The default strategy is to run a checkpoint once the WAL reaches pages and this strategy seems to work well in test applications on workstations, but other strategies might work better on different platforms or for different workloads.
If a write-ahead log is used, the program can check this log and compare what it was supposed to be doing when it unexpectedly lost power to what was actually done. Links to commands and interfaces to accomplish this are shown below.
Checkpoint also requires more seeking. The checkpointer makes an effort to do as many sequential page writes to the database as it can the pages are transferred from WAL to database in ascending order but even then there will typically be many seek operations interspersed among the page writes.
That is whenever a data has to be retrieved; it will be retrieved from the disk for the first time. Further, syncing the content to the disk is not required, as long as the application is willing to sacrifice durability following a power loss or hard reboot.
Transactions that involve changes against multiple ATTACHed databases are atomic for each individual database, but are not atomic across all databases as a set.