背景
项目在小型服务器上需要使用到SQLite,在默认配置下(以下数据均在4C16G,SSD环境测试),会出现以下瓶颈。
- SQLite的写性能大概在100-200TPS,这样的写性能对服务器(哪怕是4g内存)来说也显得不够看。
- 并发能力不足,经测试并发量在10QPS以上就会概率性database is locked。
- 当遇到database is locked的异常信息,sqlite操作失败后无法重试。
整改思路:
从网上搜集的各路资料,结合业务汇总出一些优化点。
1.journal_mode
journal_mode , 事务处理方式,获取或设置控制日志文件如何存储和处理的日志模式。
使用WAL模式,具体介绍可参考:http://www.sqlite.org/draft/wal.html
或者博客https://blog.csdn.net/dyllove98/article/details/8841973
优点:
1.读和写可以完全地并发执行,不会互相阻塞(但是写之间仍然不能并发)。
2.WAL在大多数情况下,拥有更好的性能(因为无需每次写入时都要写两个文件)。
3.磁盘I/O行为更容易被预