博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQLite性能优化实践
阅读量:2382 次
发布时间:2019-05-10

本文共 889 字,大约阅读时间需要 2 分钟。

背景

      项目在小型服务器上需要使用到SQLite,在默认配置下(以下数据均在4C16G,SSD环境测试),会出现以下瓶颈。

  1. SQLite的写性能大概在100-200TPS,这样的写性能对服务器(哪怕是4g内存)来说也显得不够看。
  2. 并发能力不足,经测试并发量在10QPS以上就会概率性database is locked。
  3. 当遇到database is locked的异常信息,sqlite操作失败后无法重试。

 

整改思路:

      从网上搜集的各路资料,结合业务汇总出一些优化点。

1.journal_mode

 journal_mode ,  事务处理方式,获取或设置控制日志文件如何存储和处理的日志模式。 

使用WAL模式,具体介绍可参考: 

 或者博客

     优点:

      1.读和写可以完全地并发执行,不会互相阻塞(但是写之间仍然不能并发)。

      2.WAL在大多数情况下,拥有更好的性能(因为无需每次写入时都要写两个文件)。

      3.磁盘I/O行为更容易被预测。

      缺点:

      1.访问数据库的所有程序必须在同一主机上,且支持共享内存技术。

      2.每个数据库现在对应3个文件:<yourdb>.db,<yourdb>-wal,<yourdb>-shm。

      3.当写入数据达到GB级的时候,数据库性能将下降。

      4.3.7.0之前的SQLite无法识别启用了WAL机制的数据库文件。

  经测试,使用wal模式后,写性能提升2-3倍,同时实现读写分离,读性能也会大幅提升。

2.批量插入

     批量插入使用SQLite的事务!!!单线程插入1000条记录从5.5s提升到22ms,性能提升N倍,千万不要循环插入单条记录。

3.cache_size

     pages 值表示在缓存中的页面数。内置页面缓存的默认大小为 2,000 页,最小尺寸为 10 页。 此处配置修改对写性能略有提升。

4.busy_timeout

官网介绍:

总的来说,设置了该超时时间后, 当数据库繁忙的时候不会立马返回异常, 而是睡眠多次重试直到超时,以此可以提升可靠性。 测试时设置超时5000ms, 该参数不宜设置过长,数据库等待返回期间应用程序的线程会阻塞住。

 

 

 

 

转载地址:http://abyab.baihongyu.com/

你可能感兴趣的文章
kernel基本功练习
查看>>
UNIX/LINUX 平台可执行文件格式分析
查看>>
轻量级服务器选择
查看>>
补丁的制作和使用:diff和patch
查看>>
pkg-config指南
查看>>
不用任何变量,实现strlen函数
查看>>
关于C语言的位移操作
查看>>
由“输出从1到1000的数”想到的
查看>>
键盘上各个按键的英文名
查看>>
Linux系统文本模式下的截屏技巧
查看>>
php中$_Get $_POST $_REQUEST区别
查看>>
PHP - 解决中文乱码问题
查看>>
php empty() isset() is_null()
查看>>
PHP学习-面向对象
查看>>
js页面跳转整理
查看>>
在64位Win7操作系统中安装Microsoft Access Engine的解决方案
查看>>
30类CSS选择器
查看>>
微信支付的使用介绍
查看>>
PHP单例模式应用详解
查看>>
冒号课堂§5.2:数据类型
查看>>