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 | 张不坏的博客

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-09-15
  • 2022-01-12
  • 2021-12-19
  • 2022-02-03
  • 2021-10-05
  • 2021-08-19
猜你喜欢
  • 2021-10-24
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案