sqlite 資料庫一般執行在嵌入式環境中,需要兼顧效能和硬體資源。
sqlite 使用pragma命令在 sqlite 環境內控制各種環境變數和狀態標誌。乙個 pragma 值可以被讀取,也可以根據需求進行設定。主要介紹幾個在嵌入式開發中經常使用的關鍵引數。
synchronouspragma 獲取或設定當前磁碟的同步模式,該模式控制積極的 sqlite 如何將資料寫入物理儲存。也就是說該引數控制何時執行sync指令。
pragma 值
描述0 或 off
不進行同步。
1 或 normal
在關鍵的磁碟操作的每個序列後同步。
2 或 full
在每個關鍵的磁碟操作後同步。
當synchronous設定為full (2), sqlite資料庫引擎在緊急時刻會暫停以確定資料已經寫入磁碟。這使系統崩潰或電源出問題時能確保資料庫在重起後不會損壞。為了保證資料的安全性,該項建議設定為full。
journal_modepragma 獲取或設定控制日誌檔案如何儲存和處理的日誌模式。
pragma 值
描述delete
預設模式。在該模式下,在事務結束時,日誌檔案將被刪除。
truncate
日誌檔案被階段為零位元組長度。
persist
日誌檔案被留在原地,但頭部被重寫,表明日誌不再有效。
memory
日誌記錄保留在記憶體中,而不是磁碟上。
off不保留任何日誌記錄。
首先補充乙個知識點,sqlite中日誌模式主要有delete和wal兩種,其中wal(write ahead logging)是一種日誌模式,它是一種思想,普遍應用於關係型資料庫。每個事務執行變更時,修改資料頁,同時會產生日誌,這樣在事務提交後,不需要將修改的髒頁刷盤,只需要將事務產生的日誌落盤即可返回。wal保證日誌一定先於對應的髒頁落盤,就是所謂的wal。
delete模式採用影子分頁技術(shadow paging),delete模式下,日誌中記錄的變更前資料頁內容;wal模式下,日誌中記錄的是變更後的資料頁內容。事務提交時,delete模式將日誌刷盤,將db檔案刷盤,成功後,再將日誌檔案清理;wal模式則是將日誌檔案刷盤,即可完成提交過程。
建議將journal_mode 設定為delete,當資料寫入資料庫有失敗動作時,透過journal檔案予以復原到未更動前(原始)資料,來確保資料完整與一致性。如果在每次寫入的時間很長或頻繁的進行資料庫寫入情況下,因系統(主機)電力不穩或突然斷電時,那麼下次重新啟動,而journal檔案若存在,則在開啟sqlite資料庫時,若發現有journal檔案的存在,便會對資料庫做rollback 動作(還原)。
預設值為-1,表示沒有限制,單位是位元組。
delete模式下,當日誌增長超過閥值時,則進行截斷。default_journal_size_limit,用於設定日誌檔案的預設大小。
cache_sizepragma 可獲取或暫時設定在記憶體中頁面快取的最大尺寸。
pages值表示在快取中的頁面數。內建頁面快取的預設大小為 2,000 頁,最小尺寸為 10 頁。每頁使用約1.5k記憶體,若需要使用改變大量多行的update或delete命令,並且不介意sqlite使用更多的記憶體的話,可以增大快取以提高效能。建議設定為2000即可。
auto_vacuumpragma 獲取或設定 auto-vacuum 模式。
pragma 值
描述0 或 none
禁用 auto-vacuum。這是預設模式,意味著資料庫檔案尺寸大小不會縮小,除非手動使用 vacuum 命令。
1 或 full
啟用 auto-vacuum,是全自動的。在該模式下,允許資料庫檔案隨著資料從資料庫移除而縮小。
2 或 incremental
啟用 auto-vacuum,但是必須手動啟用。在該模式下,引用資料被維持,自由頁面只放在自由列表中。這些頁面可在任何時候使用incremental_vacuum pragma進行覆蓋。
正常情況下,當提交乙個從資料庫中刪除資料的事務時,資料庫檔案不改變大小。未使用的檔案頁被標記並在以後的新增操作中再次使用。這種情況下使用vacuum命令釋放刪除得到的空間。但是vacuum的效率非常低!建議 設定成none(0),定時手動進行vacuum操作。
Socket I O 模型的效能引數
伺服器 p4 17g xeon,記憶體768mb i o 模型 嘗試數 成功連線數 使用記憶體 k 未分頁記憶體池 cpu 線程式 吞吐率 byte s 阻塞 7000 1008 25632 36121 10 60 2016 2198148 非阻塞 7000 4011 4208 135123 95 ...
常用磁碟的效能引數
傳統磁碟本質上一種機械裝置,如fc,sas,sata磁碟,轉速通常為5400 7200 10k 15k rpm不等。影響磁碟的關鍵因素是磁碟服務時間,即磁碟完成乙個i o請求所花費的時間,它由尋道時間 旋轉延遲和資料傳輸時間三部分構成。1,尋道時間 tseek是指將讀寫磁頭移動至正確的磁軌上所需要的...
linux上NFS效能引數
linux nfs客戶端對於同時發起的nfs請求數量進行了控制,若該引數配置較小會導致io效能較差,檢視該引數 cat proc sys sunrpc tcp slot table entries 預設編譯的核心該引數最大值為256,可適當提高該引數的值來取得較好的效能,請以root身份執行以下命令...