sqlite内存问题

alexapples 2010-10-11 06:10:17
我在linux下写了个程序,是将大批量数据读到sqlite的内存数据库,程序定时的将sqlite内存数据库中的数据复制到磁盘数据库,并删除sqlite的内存数据库中的数据。
程序一直运行,会出现内存被耗尽。使用valgrind检测,并没有内存泄露。
如果我将程序里的sqlite操作注释掉,只是空执行,内存并不会不断增长。
请问有没有可能是sqlite内存的问题?
...全文
1258 17 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
ITailor 2013-04-11
  • 打赏
  • 举报
回复
引用 12 楼 wqkjj 的回复:
引用 11 楼 的回复:我也遇到了这个问题,我在执行了delete操作以后,执行了vacuum操作 cm_sqlite3_exec("VACUUM", db, NULL, 0); 但是内存还是在增长,并没有完全的清掉。不过比不执行vacuum要少了一些(大概不到一半),不知道为什么?是不是sqlite内存数据库本身的问题呢? (1)sqlite内存增加……
有一个疑问就是,与sqlite建立连接进行增删改查最后关闭,这整个过程是把整个sqlite文件加载到内存吗?官网说这个文件最大可以支持2T,如果是这样的话,他肯定测试了才能在官网给出2T的数据,不过占用2T的内存有点吓人
strongc1969 2012-07-19
  • 打赏
  • 举报
回复
试试定期将内存库中的内容全部导出成文件,关闭内存库。
然后创建库,倒回
TonyXQQ 2012-07-14
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
想请问LZ是如何“将大批量数据读到sqlite的内存数据库”?是动态的吗?求教啊
[/Quote]
就是用SQL语句呗INSERT
LIMINLY520 2012-06-21
  • 打赏
  • 举报
回复
可惜没有具体的代码啊
wqkjj 2012-04-14
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 的回复:]

我也遇到了这个问题,我在执行了delete操作以后,执行了vacuum操作
cm_sqlite3_exec("VACUUM", db, NULL, 0);
但是内存还是在增长,并没有完全的清掉。不过比不执行vacuum要少了一些(大概不到一半),不知道为什么?是不是sqlite内存数据库本身的问题呢?
[/Quote]

(1)sqlite内存增加,只能说明你的数据量在不断增加。sqlite是假设所以的数据都保存在内中的。因此数据增加而内存增加是正常情形。
(2)执行vacuum只是让sqlite收回它管理的内存数据库空间以用于新记录的重新利用。
(3)好多OS的内存管理策略,进程申请的内存,并不能通过free(...)来释放给其他进程来使用,而是放在该进程的自由缓存列表中,等待该进程的下次malloc时分配使用(这样可以减少进程间的冲突和分配的效率)。因此,如果假设sqlite分配了1G的内存,那么即使它只有500M的数据,但他占用的物理内存仍是1GB。
sun007700 2012-03-26
  • 打赏
  • 举报
回复
我也遇到了这个问题,我在执行了delete操作以后,执行了vacuum操作
cm_sqlite3_exec("VACUUM", db, NULL, 0);
但是内存还是在增长,并没有完全的清掉。不过比不执行vacuum要少了一些(大概不到一半),不知道为什么?是不是sqlite内存数据库本身的问题呢?
ggxxkkll1 2011-10-18
  • 打赏
  • 举报
回复
学习了!
VideoMonitor 2011-10-12
  • 打赏
  • 举报
回复
我现在正想实现用程序将数据写入内存数据库,刚刚接触sqlite,还不知道怎么实现,请问哪位大侠有例程供我参考一下,谢谢,急求?
iihero 2011-08-01
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 angelgy880505 的回复:]

引用 2 楼 iihero 的回复:
"并删除sqlite的内存数据库中的数据"
这里并不是真正的删除内存中的数据。
没有内存泄露,也是正常的。
给你一个解决方案,每次删除内存中的数据以后,执行VACCUM,清空无用的块,这样,就不会内存耗尽。
多了解一下数据库的原理还是有好处的。

请问“每次删除内存中的数据以后,执行VACCUM,清空无用的块”,具体怎么实现的?
我之前没用过……
[/Quote]

delete,并commit之后,定期执行一下vaccum,这才真正的从内存中删除相应的数据。
angelgy880505 2011-07-22
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 iihero 的回复:]
"并删除sqlite的内存数据库中的数据"
这里并不是真正的删除内存中的数据。
没有内存泄露,也是正常的。
给你一个解决方案,每次删除内存中的数据以后,执行VACCUM,清空无用的块,这样,就不会内存耗尽。
多了解一下数据库的原理还是有好处的。
[/Quote]
请问“每次删除内存中的数据以后,执行VACCUM,清空无用的块”,具体怎么实现的?
我之前没用过。具体的代码是怎么样的?
angelgy880505 2011-07-22
  • 打赏
  • 举报
回复
我在进行数据存储的时候也出现这样的问题。
将主板Flash中的数据库数据转移到SD卡的数据库中,内存耗尽。
请用楼主现在问题解决了吗?怎么解决的?
longting0101 2011-04-28
  • 打赏
  • 举报
回复
想请问LZ是如何“将大批量数据读到sqlite的内存数据库”?是动态的吗?求教啊
wwwwb 2010-11-09
  • 打赏
  • 举报
回复
执行VACCUM后,才会真正释放占用的内存、磁盘究竟
iihero 2010-11-09
  • 打赏
  • 举报
回复
"并删除sqlite的内存数据库中的数据"
这里并不是真正的删除内存中的数据。
没有内存泄露,也是正常的。
给你一个解决方案,每次删除内存中的数据以后,执行VACCUM,清空无用的块,这样,就不会内存耗尽。
多了解一下数据库的原理还是有好处的。
ACMAIN_CHM 2010-10-11
  • 打赏
  • 举报
回复
你的代码是什么?

2,209

社区成员

发帖
与我相关
我的任务
社区描述
其他数据库开发 其他数据库
社区管理员
  • 其他数据库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧