数据库通过多次插入/更新来占用内存和冻结

时间:2015-04-22 13:28:49

标签: database sqlalchemy

我正在开发一个带有与PostgreSQL数据库后端链接的SQLAlchemy ORM的Web应用程序。我有这个用例,客户端上传一个包含大数据的大约20 MB的文件。我要做的是,对从数据库上传的文件解析的大约一百万个条目运行一系列选择,插入和更新命令。

我使用的是8 GB内存的Ubuntu 12.0,每当我执行这个大量的插入更新操作时,我的内存大约会达到90%的使用率并且在插入和更新的大约一半时会冻结。

在此期间,不会插入或更新任何内容。什么都没发生,除非我杀了这个过程,否则会影响我的系统性能。

我有3张桌子。两个包含数据,另一个是包含前两个表的外键的联结表,以及指定前两个表中插入的行数的列。 我没有指定索引,并且Autocommit已关闭。

我尝试查找批量插入和建议说

  

" COPY优于INSERT","让您的数据库离线并插入"和   延期外键处理。

I checked this 如果有任何方法可以插入我的插入,请告诉我,以便在DB占用写入时我可以提供其他请求。否则,我的整个Web应用程序将通过此特定上载操作冻结。提前谢谢。

修改

我正在使用ZOPE事务管理器,我的事务只在所有插入和更新结束时提交。在那之前,我只发出多个DBSession.add()命令但没有提交。这可能是问题吗?我的会话对象是否占用了所有内存? 在SQLAlchemy文档中阅读本文之后,我对此产生了疑问:

  

作为一般规则,将会话的生命周期分开并保持   外部来自访问和/或操纵的功能和对象   数据库数据。

0 个答案:

没有答案