WAL文件的使用

 

数据中心有多种日志模式,具体描述如下,本次主要分析WAL日志模式的配置和操作:

#define DB_JOURNAL_DELETE        "DELETE"    //默认模式。在该模式下,在事务结束时,日志文件将被删除
#define DB_JOURNAL_TRUNCATE        "TRUNCATE"    //日志文件被阶段为零字节长度
#define DB_JOURNAL_PERSIST        "PERSIST"    //日志文件被留在原地,但头部被重写,表明日志不再有效
#define DB_JOURNAL_MEMORY        "MEMORY"    //日志记录保留在内存中,而不是磁盘上
#define DB_JOURNAL_OFF            "OFF"        //不保留任何日志记录
#define DB_JOURNAL_WAL            "WAL"        //数据库预写日志


1. 配置WAL日志模式(整个SQLite句柄只有一次日志模式配置,经实测,只有第一次有效,后面再修改时已无效): 
    sqlite3_exec(pHandle, "PRAGMA journal_mode = WAL", NULL, 0, &err))
    
2. 配置WAL日志自动提交(数据库wal文件记录页到设置的个数,wal文件数据将同步到本地文件)
    sqlite3_exec(pHandle, "PRAGMA wal_autocheckpoint=1000", NULL, 0, &err))
    
3. 手动触发WAL日志提交
    ...
    
4. 关闭WAL
    sqlite3_exec(db, "PRAGMA journal_mode=DELETE;", NULL, 0, &zErrMsg);
    


风险:wal、shm缓冲区都是基于文件,并非内存,这对嵌入式NandFash的读写次数有影响
具体分析参考:https://www.jianshu.com/p/6a3cb84e8e9a

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章