quote from https://www.sqlite.org/cgi/src/doc/wal2/doc/wal2.md "Checkpointers do not block writers, and writers do not block checkpointers. " If i want to do checkpoint in other thread and write in main thread, I has to create 2 connection for the same database in single thread mode? " There are also circumstances in which long-running readers may prevent a checkpointer from checkpointing the entire wal file" If a statment finished with sqlite3_step, but not closed so I can reuse it late. In this case that mean a long-running readers block prevent a checkpointer?