SQLite 庫級鎖簡介和“database is locked”異常的解決方法

轉載 :https://blog.csdn.net/WZh0316/article/details/81188451

 

SQLite 是一個軟件庫,實現了自給自足的、無服務器的、零配置的、事務性的 SQL 數據庫引擎。SQLite允許多個進程/線程同時進行讀操作,但在同一時刻只允許一個線程進行寫操作。SQLite在進行寫操作時,數據庫文件會被鎖定,此時任何其他的讀/寫操作都會被阻塞,如果阻塞超過5秒鐘(默認是5秒,可通過重新編譯SQLite進行修改),就會拋出描述爲“database is locked”的異常。

出現上述現象的原因是SQLite只支持庫級鎖,不支持併發執行寫操作,即使是不同的表,同一時刻也只能進行一個寫操作。例如,事務T1在表A新插入一條數據,事務T2在表B中更新一條已存在的數據,這兩個操作是不能同時進行的,只能順序進行。

SQLite儘量延遲了申請X鎖,直到數據塊真正寫盤時才申請X鎖,再加上被阻塞的操作有等待時間,所以當SQLite作爲客戶端嵌入數據庫被使用時時,一般情況下不會拋出“database is locked”的異常。但是,在高併發的環境下,還是很有可能拋出異常的。避免這種異常的最簡單有效的方法,就是在進行寫操作時實現互斥鎖,並保證寫操作按順序執行。
————————————————
版權聲明:本文爲CSDN博主「wzh0316」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/WZh0316/article/details/81188451

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