SQLite事务隔离性实践
通过实际上机测试,发现SQLite的事务隔离性具有以下特点:
连接级别的隔离
-
同一连接下的事务
- 不支持并发执行多个事务
- 事务必须串行执行
- 一个事务完成后才能开始下一个事务
-
不同连接间的事务
- 理论上支持并发执行
- 实际情况下通常会出现阻塞
- 第二个事务会等待第一个事务完成
锁定机制
-
阻塞行为
- 一个事务会阻塞其他事务的执行
- 被阻塞的事务会短暂等待
- 等待是临时的,有超时机制
-
超时处理
- 如果等待超时,会直接报错
- 错误提示为”数据库已锁定”
- 需要在应用层处理这种超时情况
实践建议
-
连接管理
- 合理规划数据库连接的使用
- 避免在同一连接中并发事务
- 需要并发时使用不同的连接
-
超时处理
- 实现适当的重试机制
- 设置合理的超时时间
- 添加错误处理逻辑
-
性能优化
- 控制事务执行时间
- 避免长事务
- 合理设计事务边界