sqlite 超時時間設置 [database is locked]


sqlite數據庫,同一時刻允許多個進程/線程讀,但同一時刻只允許一個線程寫。在操行寫操作時,數據庫文件被瑣定,此時任何其他讀/寫操作都被阻塞,如果阻塞超過5秒鍾(默認是5秒,能過重新編譯sqlite可以修改超時時間),就報"database is locked"錯誤。

SQLiteException: database is locked異常的解決 - 簡書

如何處理

1 默認 5 秒是很長的時間了,找出具體是哪些業務執行會造成超時 5 秒

beets: the SQLite lock timeout nightmare

2 調用方自己再加鎖

SQLiteException: database is locked異常的解決 - 簡書

3 修改 busy timeout 時間

這個只能是減少問題發生的概率,具體方法如下:

設置 busy timeout 的 API

sqlite 原始 API

Set A Busy Timeout

devart 庫的 API

BusyTimeout Property

C# 版本

設置 CommandTimeout 即可,單位為秒。

Database errors - Microsoft.Data.Sqlite | Microsoft Docs

c# - Linq-to-SQL Timeout - Stack Overflow

c# - What is the "Default Timeout" value in SQLite connection string used for? - Database Administrators Stack Exchange

Timeout issue · Issue #1668 · linq2db/linq2db

其它參考

python - OperationalError: database is locked - Stack Overflow

漫談 SQLite | 張不壞的博客


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM