【问题标题】:How much faster is a database running in RAM?数据库在 RAM 中运行的速度有多快?
【发布时间】:2011-02-15 17:06:37
【问题描述】:

我希望在 RAM 中运行 PostgreSQL 以提高性能。数据库不超过 1GB,也不应该增长到超过 5GB。值得这样做吗?那里有任何基准测试吗?它有问题吗? ?

我的第二个主要问题是:当它完全在 RAM 中运行时,备份它是多么容易。这就像将 RAM 用作第 1 层 HD 一样,还是要复杂得多?

【问题讨论】:

  • 数据(大部分)是只读的还是可读写的?

标签: database optimization


【解决方案1】:

如果您的数据库受 I/O 限制,这可能是值得的。如果它受 CPU 限制,那么 RAM 驱动器将没有任何区别。

但首先,您应该确保您的数据库已正确调整,您可以通过这种方式获得巨大的性能提升,而不会失去任何保证。如果没有正确调整,即使是基于 RAM 的数据库也会表现不佳。见PostgreSQL wiki on this,主要是shared_buffers、effective_cache_size、checkpoint_*、default_statistics_target

其次,如果您想避免在每次提交时同步磁盘缓冲区(就像 codeka 在他的评论中解释的那样),请禁用 synchronous_commit 配置选项。当你的机器断电时,这会丢失一些最新的事务,但你的数据库仍然是 100% 一致的。在这种模式下,RAM 将用于缓冲所有写入,包括对事务日志的写入。因此,对于非常罕见的检查点、大型 shared_buffers 和 wal_buffers,它实际上可以接近 RAM 驱动器的速度。

硬件也可以产生巨大的影响。在实践中,15000 RPM 磁盘的速度是用于数据库工作负载的廉价驱动器的 3 倍。具有电池后备缓存的 RAID 控制器也会产生重大影响。

如果这还不够,那么考虑转向易失性存储可能是有意义的。

【讨论】:

  • @intgr 感谢您提供的重要信息。
【解决方案2】:

是否将数据库保存在内存中的整个过程取决于大小和性能以及您希望它在写入时的稳健程度。我假设您正在写入您的数据库,并且您希望在发生故障时保留数据。

就我个人而言,在遇到性能问题之前,我不会担心这种优化。这对我来说似乎很冒险。

如果您进行大量读取而写入很少,则缓存可能会满足您的目的,许多 ORM 都带有一种或多种缓存机制。

从性能的角度来看,通过网络集群到另一个执行所有磁盘写入的 DBMS 似乎比仅仅拥有一个常规 DBMS 并对其进行调整以尽可能多地保留在 RAM 中的效率要低得多.

【讨论】:

    【解决方案3】:

    实际上...只要您有足够的可用内存,您的数据库就已经在 RAM 中完全运行。您的文件系统将完全缓冲所有数据,因此不会产生太大影响。

    但是...当然总会有一些开销,所以你仍然可以尝试从内存驱动器运行它。

    至于备份,就像任何其他数据库一样。您可以使用普通的 Postgres 转储实用程序来备份系统。或者更好的是,让它复制到另一台服务器作为备份。

    【讨论】:

    • 磁盘上的数据库,即使所有页面都在内存中,也需要同步写入日志文件以维护 ACID 属性。因此,内存数据库实际上会快很多,因为它不必这样做。当然,如果数据库大部分是只读的,这并不适用。
    • @codeka 在我的情况下,我将执行几乎与读取一样多的写入(包含大量事务)。
    • @Dean Harding:大多数数据库服务器都是可配置的。写入不必必须同步。以 Postgres 为例,您可以完全配置何时写入(间隔、字节等)。
    【解决方案4】:

    比磁盘驻留 DBMS 快 5 到 40 倍。查看 Gartner 的 2013 年运营 DBMS 魔力象限。 Gartner 显示了谁是强大的,更重要的是注意到了严重的警告......错误。 .errors...缺乏支持且难以使用供应商。

    【讨论】:

    • 同意golferchung。速度非常好,但要小心供应商。只有少数具有纯粹的耐用性和一致性。其他人有最终的一致性,这是不好的。
    猜你喜欢
    • 2010-11-13
    • 2019-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-12
    • 2021-05-02
    • 1970-01-01
    相关资源
    最近更新 更多