我希望在RAM中运行PostgreSQL以提高性能。数据库不超过1GB,不应该增长到超过5GB。是否值得做?有没有基准测试?是否有错误?
我的第二个主要问题是:当它纯粹在RAM中运行时,备份是多么容易。这就像使用RAM作为第1层HD,还是更复杂?
答案 0 :(得分:5)
如果您的数据库受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控制器也会产生重大影响。
如果仍然不够,那么考虑转向易失性存储可能是有意义的。
答案 1 :(得分:4)
关于是否在内存中保存数据库的全部内容取决于大小和性能以及您希望它与写入的强大程度。我假设您正在写入您的数据库,并且您希望在发生故障时保留数据。
就个人而言,在遇到性能问题之前,我不会担心这种优化。这对我来说似乎有风险。
如果您正在进行大量读取并且写入很少,则缓存可能会满足您的需求,许多ORM都带有一个或多个缓存机制。
从性能的角度来看,通过网络集群到另一个执行所有磁盘写入的DBMS,似乎比仅使用常规DBMS并将其调整到尽可能多地保存在RAM中要低得多
答案 2 :(得分:1)
实际上......只要你有足够的可用内存,你的数据库就已经在RAM中完全运行了。您的文件系统将完全缓冲所有数据,因此它不会产生太大的影响。
但是...总是有一些开销,所以你仍然可以尝试从ramdrive运行它。
至于备份,就像任何其他数据库一样。您可以使用普通的Postgres转储实用程序来备份系统。或者甚至更好,让它作为备份复制到另一台服务器。
答案 3 :(得分:1)
比磁盘驻留DBMS快5到40倍。查看Gartner 2013年运营DBMS的魔力象限。 Gartner表明谁是强者,更重要的是注意到严重的警告......错误。 .errors ...缺乏支持和供应商难以使用。