【问题标题】:How to tell how much main memory an app uses如何判断应用程序使用了多少主内存
【发布时间】:2010-09-19 12:03:07
【问题描述】:

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

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

这是一种不愚蠢的做法吗?有没有更好的办法?

谢谢, 小布

【问题讨论】:

  • 你为什么受限?内存很便宜!还是适用于移动/嵌入式设备?

标签: database memory footprint


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    要解决此问题,请打开查询游标并逐一获取行,在遍历结果集时丢弃行对象。这样您一次只存储一行,并且您可以更轻松地预测“高水位线”。

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

    在数据库服务器端,您应该能够管理它分配给索引缓存等的内存量,但是您可以配置的具体内容在每个品牌的数据库中是不同的。自学如何调整每台服务器没有捷径可走。

    【讨论】:

      【解决方案3】:

      最终,这种优化可能回答错了问题。

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

      【讨论】:

      • 幸运的是,我使用的是 JDBC,它是使用数据库的 Java 应用程序的标准 API
      • JDBC 是您发送 SQL 语句的“管道”......不幸的是,数据库之间的 SQL 语法经常不同。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-20
      • 2023-04-07
      • 2011-01-24
      • 2018-03-07
      • 2012-07-08
      • 1970-01-01
      相关资源
      最近更新 更多