資料中心有多種日誌模式,具體描述如下,本次主要分析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的讀寫次數有影響
具體分析參考:
介紹資料庫中的wal技術 預寫日誌 WAL 介紹
預寫日誌 wal,write ahead log 是關係型資料庫中用於實現事務性和永續性的一系列技術。簡單來說就是,做乙個操作之前先講這件事情記錄下來。為什麼要使用wal呢?比如你的備忘錄裡面有如下記錄 2015.12.25 理髮 2015.12.28 整容 2015.12.31 修指甲 別亂想,博...
SQLite中的WAL機制詳細介紹
一 什麼是wal?wal的全稱是write ahead logging,它是很多資料庫中用於實現原子事務的一種機制,sqlite在3.7.0版本引入了該特性。二 wal如何工作?在引入wal機制之前,sqlite使用rollback journal機制實現原子事務。rollback journal機...
事務的ACID特性 各特性由什麼保證 WAL是什麼
原子性 永續性 是由恢復系統保證的 一致性 隔離性 是由併發排程保證的 write ahead logging sql server中使用了wal write ahead logging 技術來保證事務日誌的acid特性,所有的修改 都先被寫入到日誌中,然後再被寫入到系統狀態中。如果沒有wal 乙個...