天天看點

sqlite性能調優筆記

1.mmap

import sqlite3
cursor = sqlite3.connect(comment_db).cursor()
cursor.execute('PRAGMA mmap_size=4294967296')
           

資料庫讀取和寫入的過程,資料要從磁盤拷貝到核心空間,然後拷貝到使用者空間,sqlite3提供mmap機制,直接從磁盤拷貝到使用者空間,節省了磁盤到核心空間的IO開銷。

2.synchronous

cursor.execute("PRAGMA synchronous=OFF")
           

synronous參數有full,normal,off三種選擇。

當synchronous設定為FULL

SQLite資料庫引擎在緊急時刻會暫停以确定 資料已經寫入磁盤。這使系統崩潰或電源出問題時能確定資料庫在重起後不會損壞。FULL synchronous很安全但很慢。 在SQLite 3中修改為FULL。

當synchronous設定為NORMAL

SQLite資料庫引擎在大部分緊急時刻會暫停,但不像FULL模式下那麼頻繁。 NORMAL模式下有很小的幾率(但不是不存在)發生電源故障導緻資料庫損壞的情況。但實際上,在這種情況 下很可能你的硬碟已經不能使用,或者發生了其他的不可恢複的硬體錯誤。在SQLite 2中,預設值為NORMAL.

設定為synchronous OFF

SQLite在傳遞資料給系統以後直接繼續而不暫停。若運作SQLite的應用程式崩潰, 資料不會損傷,但在系統崩潰或寫入資料時意外斷電的情況下資料庫可能會損壞。另一方面,在synchronous OFF時 一些操作可能會快50倍甚至更多。

資料安全性不高的場景,可以考慮更改 syncchronous = off 的模式;(寫資料的速度50倍+的提升)

資料安全性較高的場景,可以考慮更改 syncchronous = nomal 的模式;(寫資料的性能也有5倍+的提升)

synchronous詳情請見:

原文:https://blog.csdn.net/bravegogo/article/details/53517610