如何判断应用程序使用多少主内存

时间:2008-10-28 00:29:51

标签: database memory footprint

我需要选择使用最少量主内存的数据库管理系统(DBMS),因为我们受到严格限制。由于DBMS将使用越来越多的内存来保存主内存中的索引,我究竟如何判断哪个DBMS具有最小的内存占用?

现在我只打开一个内存监控程序,当我执行一系列查询时,我们将调用X.然后我在不同的DBMS上运行相同的查询X,并查看在其生命周期中使用了多少内存与其他内存占用量进行比较。

这是一种不傻的方式吗?还有更好的方法吗?

谢谢, JBU

3 个答案:

答案 0 :(得分:2)

只需使用SQLite。在一个过程中。使用C ++,最好是。

答案 1 :(得分:1)

您可以在应用程序中执行的操作是管理如何获取数据。如果从给定查询中获取所有行,它可能会尝试在您的应用程序中构建Collection,如果您不小心,可能会非常快地消耗内存。这可能是内存耗尽的最可能原因。

要解决此问题,请将游标打开到查询并逐个获取行,在迭代结果集时丢弃行对象。这样你一次只能存储一行,你可以更容易地预测“高水位线”。

根据JDBC驱动程序(即您要连接的数据库的品牌),说服JDBC驱动程序进行取消操作可能会很棘手。例如,某些驱动程序获取整个结果集,以允许您向后和向前滚动它。尽管JDBC是一个标准接口,但将其配置为一次一行而不是fetchall可能涉及专有选项。

在数据库服务器端,您应该能够管理它为索引缓存分配的内存量等等,但是您可以配置的特定内容在每个品牌的数据库中都是不同的。教育自己如何调整每个服务器没有捷径。

答案 2 :(得分:0)

最终,这种优化可能会回答错误的问题。

您通过此类测试收集的答案很可能会产生误导,因为DBMS在“实时”环境下的反应会比您在测试期间的反应不同。此外,您将自己锁定在特定的架构中。一旦你有针对它编写的代码,就很难改变DBMS。您可以更好地找到哪些DBMS将满足您的需求并简化您的开发过程,然后确保您正在优化您的SQL查询和索引以满足您的应用程序的需求。