【问题标题】:Sqlite3 in embedded system - process memory increase?嵌入式系统中的 Sqlite3 - 进程内存增加?
【发布时间】:2012-01-19 15:24:16
【问题描述】:

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

堆内存扩展肯定与数据库的大小直接相关(证据:如果“insert-to-database”行被注释掉,扩展永远不会发生并且如果启用日志包装,当数据库开始包装时扩展停止发生,就好像它已被最大化)。

我们使用的是类似 unix 的操作系统。

有谁知道 SQLITE3 是否执行某种我们可以禁用的缓存,如果 UNIX 可能自己这样做,或者这是否必然是一个问题?这里的担心显然是堆内存可能被耗尽,导致我们的系统崩溃。

我看到了对 UNIX 缓存事物本身并在需要时释放与缓存相关的内存的奇怪引用,但我对这个主题的了解不够,无法确信这是真的。我没有在 SQLITE3 文档中成功找到任何相关的内容(我理解)。

【问题讨论】:

    标签: database unix sqlite operating-system embedded


    【解决方案1】:

    几天后,我确定您可以在创建数据库时或在打开连接之前使用编译指示来缓解此问题。我会将其作为已接受的答案发布,因为自发布以来甚至没有人评论过这个问题。

    通过sqlite3接口设置,设置为0或者你更喜欢的数字。

    PRAGMA cache_size=0; 
    

    阻止进程内存根据数据库大小增长。显然,即使有“默认”缓存限制,它们要么被禁用,要么在我们的实现中不起作用——可能是由于在交叉编译 sqlite3 时使用了编译选项。设置 pragma 可以正确执行限制以阻止进程大小增长。

    这里是更多信息的参考:

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

    【讨论】:

      猜你喜欢
      • 2019-05-24
      • 1970-01-01
      • 2021-07-21
      • 1970-01-01
      • 2012-03-25
      • 2014-04-14
      • 2010-09-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多