Linux   发布时间:2022-04-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了linux – SQLite WAL性能提升大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

我有一个在嵌入式 Linux上运行的应用程序. 我有一个带有一些表的预构建DB,每个表都有很多行(数千)和52列.我提前构建了数据库,因为我担心如果我在运行时执行’INSERT’,我将进行磁盘碎片,所以我首先使用大量垃圾’INSERT’并在运行时构建数据库我使用’更新’. 我每隔3秒就向DB写入大量数据.为了使写入过程快速,我在Sqlite中使用WAL模式.然,我有性能问题.似乎每当检查点发生时
我有一个在嵌入式 Linux上运行的应用程序.
我有一个带有一些表的预构建DB,每个表都有很多行(数千)和52列.我提前构建了数据库,因为我担心如果我在运行时执行’INSERT’,我将进行磁盘碎片,所以我首先使用大量垃圾’INSERT’并在运行时构建数据库我使用’更新’.

我每隔3秒就向DB写入大量数据.为了使写入过程快速,我在sqlite中使用WAL模式.然,我有性能问题.似乎每当检查点发生时,它需要太长时间,处理器不能在不到3秒的时间内完成.
为了改善这一点,我创建了一个线程,在10次写入调用之后,它从主线程接收消息队列,而不是检查点.

所以现在,似乎情况更好但是WAL文件变得越来越大……
我怎么在这里解决

解决方法

为了避免碎片并消除预插入数据的需要,您应该使用带有 SQLITE_FCNTL_CHUNK_SIZEsqlite3_file_control()来设置块大小.以大块(例如,每次1MB)分配数据库文件空间应该减少文件系统碎片并提高性能. Mozilla项目是 currently using this setting,在Firefox / Thunderbird中有 great success.

关于WAl.如果您经常编写大量数据,则应虑将写入包装到更大的事务中.通常,每个INSERT都是自动提交的,sqlite必须等到数据真正刷新到磁盘或闪存 – 这显然非常慢.如果将多个写入包装到一个事务中,sqlite不必担心每一行,并且可以一次刷新多行,最有可能是单个闪存写入 – 这要快得多.
因此,如果可以的话,尝试将至少几百个写入包装到一个事务中.

根据我的经验,WAL on flash并没有真正起作用,我发现坚持旧的日记模式更有利.例如,Android 4不为其sqlite数据库使用WAL模式,可能是有原因的.正如您所注意到的,在某些情况下,WAL有一种无限制增长的趋势(但是,如果事务很少发生,它也会发生 – 所以一定要偶尔这样做).

大佬总结

以上是大佬教程为你收集整理的linux – SQLite WAL性能提升全部内容,希望文章能够帮你解决linux – SQLite WAL性能提升所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。