解决SQLite database is locked
前些时候,同事在站点服务端使用SQlite存储一些临时数据,但是在多人并发的时候Sqlite会抛出异常:The database file is locked , database is locked,而且这个是在客户生产环境下提示出来的,开发环境很难重现,同事实在没辙,竟然想发动所有研发同事通过操作软件重现问题,我只能呵呵了。既然是Sqlite的原因,直接写个小程序测试下sqlite不就行了,而且就算重现了,难不成要改Sqlite源码...
Sqlite的特点:
SQLite只支持库级锁,库级锁意味着什么?——意味着同时只能允许一个写操作,也就是说,即事务T1在A表插入一条数据,事务T2在B表中插入一条数据,这两个操作不能同时进行,即使你的机器有100个CPU,也无法同时进行,而只能顺序进行。表级都不能并行,更别说元组级了——这就是库级锁。但是,SQLite尽量延迟申请X锁,直到数据块真正写盘时才申请X锁,这是非常巧妙而有效的。
上面的介绍可以看出Sqlite其实是一个客户端嵌入数据库,在高并发的服务器上是无法适用的,同事百度后,发现连接串中加入 "Journal Mode=WAL;"可以缓解并发压力,可是客户生产环境仍然出现“database is locked”错误。
测试程序如下:
测试发现,在i5 2.5Ghz 四核的机器上,跑了不到半分钟,大概执行了500条Update语句,Sqlite就报错,提示“ database is locked”,但是在差一点的机器上很难重现,这也就解释了开发机上难重现而在客户服务器上报错的现象。
解决办法:
事实证明Sqlite不支持并发执行写入操作,即使是不同的表,只支持库级锁,而且这个Sqlite本身没有实现,必须自己实现这个库级锁。
最近更新行业动态
- 全国211大学排名榜单公布,划分2个行政级别!
- 小学语文阅读专项十五——说明文阅读的简单方法
- 线上学校为“数字化教师”赋能
- 广钢3所“大公办”幼儿园集中开园
- 安徽师范大学附属巢湖实验中学今秋正式招新生
- 反驳俞敏洪,中小学教师绝对有资格,也绝对能胜任教学岗位
- 高考275人上清华北大,衡水中学却被质疑,看到这张图大家沉默了
- 大学生入党和不入党有什么差别?看完这篇文章你就知道了
- 三年级数学期末考试,学生考了60分,全班第3名,妈妈听后却哭了
- “鬼才”历史老师:重大“标志性”事件绘成表,初中3年不再愁
- 如果学霸当中小学老师,会不会提升档次?网友:学霸不适合当老师
- 中学校服收2300元:家委会别没“存在感”
- 三年级语文修改病句练习题汇总,很全面(可打印),期中考试要考
- 江苏最憋屈的大学,曾是全国重点大学,如今却连211都没混上!
- 高中数学:函数和导数题型你会做吗?
- 2020部编版三年级语文下册,第二单元测试卷,附答案
- 幼儿园开学时间终于敲定了,家长态度不一,对此,你怎么看待?
- 重要提醒:国务院将体育纳入高中学业水平测试是否影响你?
- 重磅!四川公办民办高中取消自主招生考试,录取以中考成绩为依据!
- 西湖大学28位创始捐赠人中9位河南老乡 施一公:我很感谢他们
- 初中数学教学的几点思考
- 揭秘全美顶尖公立高中新泽西High Tech High
- 幼儿园小女生每天闯关1小时,妈妈解脱了,她却驶上“快车道”!
- 初中生“早恋”时,多半会偷偷做“3件事”,尤其第1件太真实!
- 网传贵阳一幼儿园20名幼儿食物中毒 教育部门辟谣