SQLite 多線程優(yōu)化總結(jié)

SQLite 是線程安全的纵东,支持多線程操作歼捏。如何開(kāi)啟呢?

1而涉, PRAGMA SQLITE_THREADSAFE=2 確保同一個(gè)時(shí)間只有一個(gè)線程操作一個(gè)數(shù)據(jù)庫(kù)
2著瓶,開(kāi)啟WAL模式:原來(lái)就是開(kāi)啟了WAL,讀寫(xiě)操作都是提交一些事物到WAL文件里面去啼县,然后定時(shí)checkpoint提交到數(shù)據(jù)庫(kù)材原,當(dāng)讀取數(shù)據(jù)的時(shí)候,會(huì)在wal里面添加一個(gè)end mark季眷,這樣讀取的時(shí)候余蟹,后面的更新和插入都和讀取沒(méi)關(guān),所以保證了讀取同步進(jìn)行子刮,效率高威酒。
https://blog.csdn.net/zearot/article/details/51039593,但是寫(xiě)寫(xiě)之間還是不能同步的Mο俊<娌!缺點(diǎn)沙郭。所以下面這個(gè)點(diǎn)

3佛呻, SQLite 提供了 Busy Retry 的方案,即發(fā)生阻塞時(shí)病线,會(huì)觸發(fā) Busy Handler吓著,此時(shí)可以讓線程休眠一段時(shí)間后,重新嘗試操作送挑。重試一定次數(shù)依然失敗后绑莺,則返回 SQLITE_BUSY 錯(cuò)誤碼。它是通過(guò)文件鎖的方式去鎖住文件惕耕,SQLITE_BUSY 通過(guò) fcntl 進(jìn)行文件鎖纺裁,防止其他進(jìn)程介入。若鎖失敗司澎,則返回 SQLITE_BUSY欺缘。
因?yàn)樗鼪](méi)有通知的機(jī)制,例如其他進(jìn)程用完這個(gè)數(shù)據(jù)庫(kù)發(fā)出通知挤安,這樣SQLite_BUSY 的文件鎖就可以成功鎖住了文件谚殊,所以它才只能通過(guò)多次嘗試的方法去鎖文件

如何對(duì)SQLite 進(jìn)行優(yōu)化?

1蛤铜,優(yōu)化點(diǎn)針對(duì)的是上面第3點(diǎn)嫩絮,由于Busy Retry的機(jī)制文件鎖沒(méi)有通知的機(jī)制丛肢,所以我們可以添加通知的機(jī)制:當(dāng)文件被鎖住沒(méi)辦法加文件鎖的時(shí)候,我們就將我們的事務(wù)加到一個(gè)FIFO的queue里面剿干,線程通過(guò)pthread_cond_wait進(jìn)入睡眠蜂怎,當(dāng)文件解鎖的時(shí)候,會(huì)通過(guò)pthread_cond_signal_thread_np 信號(hào)去喚醒這個(gè)線程置尔,這樣線程就可以對(duì)這個(gè)文件進(jìn)行鎖住去寫(xiě)文件了派敷。

2, 開(kāi)始MMAP撰洗,內(nèi)存映射篮愉,低版本sqllite沒(méi)有默認(rèn)打開(kāi)。但是對(duì)WAL還是沒(méi)有進(jìn)行MMAP操作差导,那么怎么辦呢试躏?可以減少WAL的刪除和重建,在checkpoint之后设褐,修改WAL文件頭部的參數(shù)颠蕴,這樣SQLite 識(shí)別到WAL已經(jīng)不可用就會(huì)重新從頭開(kāi)始寫(xiě)入。 有了上面兩個(gè)優(yōu)化就可以大大提升了性能助析。

3犀被,可以關(guān)閉內(nèi)存統(tǒng)計(jì),內(nèi)存統(tǒng)計(jì)是在全局變量里計(jì)算外冀,所以有頻繁的加鎖解鎖操作比較耗時(shí)
sqlite3_config(SQLITE_CONFIG_MEMSTATUS寡键, 0)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市雪隧,隨后出現(xiàn)的幾起案子西轩,更是在濱河造成了極大的恐慌,老刑警劉巖脑沿,帶你破解...
    沈念sama閱讀 218,204評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件藕畔,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡庄拇,警方通過(guò)查閱死者的電腦和手機(jī)注服,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)措近,“玉大人溶弟,你說(shuō)我怎么就攤上這事∠ü睿” “怎么了可很?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,548評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵诗力,是天一觀的道長(zhǎng)凰浮。 經(jīng)常有香客問(wèn)我我抠,道長(zhǎng),這世上最難降的妖魔是什么袜茧? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,657評(píng)論 1 293
  • 正文 為了忘掉前任菜拓,我火速辦了婚禮,結(jié)果婚禮上笛厦,老公的妹妹穿的比我還像新娘纳鼎。我一直安慰自己,他們只是感情好裳凸,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布贱鄙。 她就那樣靜靜地躺著,像睡著了一般姨谷。 火紅的嫁衣襯著肌膚如雪逗宁。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,554評(píng)論 1 305
  • 那天梦湘,我揣著相機(jī)與錄音瞎颗,去河邊找鬼。 笑死捌议,一個(gè)胖子當(dāng)著我的面吹牛哼拔,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播瓣颅,決...
    沈念sama閱讀 40,302評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼倦逐,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了宫补?” 一聲冷哼從身側(cè)響起僻孝,我...
    開(kāi)封第一講書(shū)人閱讀 39,216評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎守谓,沒(méi)想到半個(gè)月后穿铆,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,661評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡斋荞,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評(píng)論 3 336
  • 正文 我和宋清朗相戀三年荞雏,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片平酿。...
    茶點(diǎn)故事閱讀 39,977評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡凤优,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蜈彼,到底是詐尸還是另有隱情筑辨,我是刑警寧澤,帶...
    沈念sama閱讀 35,697評(píng)論 5 347
  • 正文 年R本政府宣布幸逆,位于F島的核電站棍辕,受9級(jí)特大地震影響暮现,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜楚昭,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評(píng)論 3 330
  • 文/蒙蒙 一栖袋、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧抚太,春花似錦塘幅、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,898評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至庆亡,卻和暖如春匆背,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背身冀。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,019評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工钝尸, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人搂根。 一個(gè)月前我還...
    沈念sama閱讀 48,138評(píng)論 3 370
  • 正文 我出身青樓珍促,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親剩愧。 傳聞我的和親對(duì)象是個(gè)殘疾皇子猪叙,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容