Django 生成巨大的报告

Django 生成巨大的报告,django,database,Django,Database,当我为一个巨大的数据库生成报告时,我遇到了这个问题。我的应用程序在django中,当我点击这个从大型数据库生成报告的报告时,它会在很长一段时间内消耗大量内存和CPU。但是,一旦报表生成完成,它仍然不会释放内存,因此我的服务器会出现一些问题。实际上,我没有使用任何类型的过滤器来限制获取的记录数。因此,它获取所有记录并尝试生成报告。这肯定会消耗大量内存和CPU。有任何建议吗? < P>请考虑使用 MODYWSGI而不是 MODYPython < /C>。code>mod_python在apache进

当我为一个巨大的数据库生成报告时,我遇到了这个问题。我的应用程序在django中,当我点击这个从大型数据库生成报告的报告时,它会在很长一段时间内消耗大量内存和CPU。但是,一旦报表生成完成,它仍然不会释放内存,因此我的服务器会出现一些问题。实际上,我没有使用任何类型的过滤器来限制获取的记录数。因此,它获取所有记录并尝试生成报告。这肯定会消耗大量内存和CPU。有任何建议吗?

< P>请考虑使用<代码> MODYWSGI而不是<代码> MODYPython < /C>。code>mod_python在apache进程内部创建python解释器。这可能会导致存储大量内存。它更容易在mod_wsgi上托管,请查看。另一个原因可能是您声明了全局变量并将其分配给了巨大的报表数据,这会阻止python垃圾收集器释放内存。考虑通过应用一些<代码>过滤器< /代码>来减少数据集,考虑使用日期约束进行报告。清除缓存,因为数据集太大,垃圾回收器可能没有释放它。

您在操作中看到正常的进程行为。当一个进程分配内存时,它通常不会释放回操作系统,当空闲时,它只返回到实际进程的空闲列表。对于某些内存分配器和较新版本的Python,有一些例外情况,即如果释放内存空间顶部的连续内存块,它可以返回到操作系统,因此不再计入进程。但这是个例外


您最好在一个单独的进程中执行内存开销大的操作,该进程可以在完成时终止。

我们需要更多细节,什么查询?返回多少行?生成报告的某些代码会有所帮助。使用django debug工具栏查看执行查询需要多少时间。事实上,由于数据量巨大,我对它占用的CPU时间和内存没有问题。但一旦完成,它应该释放内存。我正在使用memcached。这可能是问题所在吗?我的意思是,当我第一次运行报告时,所有数据都缓存在memcached中。没关系。但是,当我再次运行同一个报告时,它不应该分配额外的内存,不是吗?它应该使用memcached缓存中的数据,不是吗。内存消耗持续增加。这就是问题所在。建议?您没有将调试设置为True,是吗?需要更多建议。因为我的数据库很大。最好是根据年份归档记录,并保持数据库的清淡。我的意思是我可以把每年的记录存档。这是更好的解决方案吗?但是如果最终用户想要旧数据呢。我不能让他翻阅档案。我想我可能需要另一个应用程序。建议?如果你的主机在linux上,你是否在apache上使用mod_python?