嵌入式系统中的Sqlite3 - 进程内存增加了吗?

时间:2012-01-19 15:24:17

标签: database unix sqlite operating-system embedded

我们在基于C ++的项目中使用Sqlite3作为嵌入式数据库。当数据库的大小增加时,使用sqlite3接口(实际提交日志记录的接口)的进程似乎会扩展其堆内存。

堆内存扩展肯定与数据库的大小直接相关(证据:如果“插入到数据库”行被注释掉,扩展永远不会发生,如果启用了日志包装,则当数据库开始包装时扩张停止发生,好像它已经达到最大值。)

我们正在使用类似Unix的操作系统。

有没有人知道SQLITE3是否会执行某些我们可以禁用的缓存,如果UNIX本身可以执行此操作,或者它是否一定存在问题?这里的担心显然是堆内存可能耗尽,导致我们的系统崩溃。

我已经看到了对UNIX缓存事物本身的奇怪引用,并在需要时释放了与缓存相关的内存,但我不太了解该主题是否真的存在。我没有在SQLITE3文档中找到任何相关的(我理解)。

1 个答案:

答案 0 :(得分:2)

几天后我确定您可以在创建数据库时或在连接打开之前使用pragma来缓解此问题。我会把它作为一个公认的答案发布,因为自从发布以来,没有人甚至评论过这个问题。

通过sqlite3界面设置它并将其设置为0或您想要更多的数字。

PRAGMA cache_size=0; 

根据数据库大小停止进程内存增长。显然,即使存在“默认”缓存限制,它们也会被禁用或者只是在我们的实现中不起作用 - 可能是由于交叉编译sqlite3时使用的编译选项。设置pragma使其能够正确实施限制以停止流程大小增长。

以下是更多信息的参考资料:

http://www.sqlite.org/pragma.html#pragma_cache_size