SQLite极致性能提升方法[转载]

SQLite极致性能提升方法:
关闭同步,Synchronous=Off,提升性能。添删改操作时不必同步等待写入磁盘,操作系统会延迟若干毫秒批量写入
设置WAL模式,Journal Mode=WAL,减少锁定。写入向前日志模式,避免多线程访问时锁定数据库,写入时不必使用排它锁影响其它线程读取,而是把事务操作写入到WAL文件中,延迟合并
加大缓存,Cache Size=5000,提升性能。操作系统通过文件映射MapFile把整个数据库文件映射进入内存,实际查询时会把用到数据所在附近页预先加载进入缓存,极大提升查询性能
插入速度 5000~16000tps,依赖CPU,HDD/SSD差别不大,主要受限于SQLite.Data.dll的Prepare
查询速度 非首次查询,缓存命中以后,索引查询基本上都是毫秒级。数据库较大则相应加大缓存,速度不变。
查记录数 单表数据超过一千万行以后,尽量不要使用Select Count,否则可能需要十几秒到半分钟的样子才能返回。NewLife.XCode封装了'Meta.Count'

当然,SQLite不适合多线程高并发写入,多线程高并发读取倒是非常不错。
因为数据库就在进程内,高并发读取一般比其它RDS要快一大截。
总的来说,SQLite数据库甭管多少数据多大库文件,只要配置得当,内存管够,性能不是太大问题!

SQLite大数据测试
为了验证SQLite的性能巅峰,我们来做一个大数据测试。
模拟每天4亿票销售订单,分表分库,每天一个数据库文件,有订单号、部门节点、时间等。
1, Test项目生成4亿行订单数据,主键自增ID,订单号建立索引,文件大小26.5G
2, Web项目,魔方+XCode,首次查询较慢,约427毫秒,需要预热
不同机器的首次查询时间偏差比较大,最大可能达到几秒钟
本机第一次启动该项目时,魔方需要从公网下载SQLite驱动文件以及样式资源文件
3, 第二页,99毫秒,操作系统文件映射缓存生效
4, 第20000页,147毫秒,系统缓存依然生效
5, 第200000页,32021毫秒,距离太远,文件系统缓存没有命中
6, 第200001页,867毫秒,缓存命中
7, 查询一个中间订单号000199999980,20毫秒,索引命中
显然,只要有索引,多大数据都不怕。
8, 本地内存占用150M。虽然整个数据库26.5G,但操作系统只会加载需要部分
对于重要程度不是特别高的场合,可以大量使用SQLite库保存历史数据,平时用不到的时候只占硬盘,不占内存
9, 记录数Select Count(select count(*)from xxx),362058毫秒,约6分钟,超级慢,这建议进行这种操作。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQLite3 是一个轻量级的嵌入式数据库性能优化可以通过以下几个方面来实现: 1. 使用适当的索引索引是提高查询性能的关键。在表中创建适当的索引,特别是在经常用于查询的列上创建索引,可以显著提高查询速度。 2. 合理设计表结构:良好的表结构设计可以提高查询和插入/更新性能。例如,避免过度范式化和冗余数据,根据查询需求选择合适的数据类型等。 3. 批量操作:使用事务和批量操作可以显著提高插入和更新的性能。将多个插入或更新操作放在一个事务中执行,可以减少磁盘写入次数,提高性能。 4. 避免频繁的查询和写入:频繁的查询和写入操作导致锁争用和磁盘IO压力增大,影响性能。合理设计应用程序的访问模式,尽量减少不必要的查询和写入操作。 5. 使用预编译语句:SQLite3 支持预编译语句,可以显著提高查询性能。预编译语句可以将 SQL 查询编译为二进制格式,在后续执行时直接使用编译好的二进制代码,避免每次查询都重新解析和编译 SQL。 6. 选择合适的缓存大小:SQLite3 使用缓存来提高查询性能。根据应用程序的需求和系统资源情况,合理设置缓存大小,避免过大或过小导致性能下降。 7. 定期优化数据库:定期对数据库进行优化操作,如 VACUUM 命令可以释放未使用的空间和优化数据库文件,提高性能。 8. 使用合适的连接方式:SQLite3 支持多种连接方式,如共享缓存模式和内存模式等。根据应用程序的需求选择合适的连接方式,可以提高性能。 需要注意的是,性能优化是一个综合考虑的过程,具体的优化方法需要根据实际情况进行调整和测试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值