首页 > 解决方案 > 在 RAMdisk 上进行 PostgreSQL 基准测试?

问题描述

我一直在考虑迁移到 RAMdisk 的想法。我知道它的风险,但只是想做一个小基准。我只有两个问题:(a)在读取查询计划时,它是否仍能区分磁盘命中和缓冲区命中?如果是这样,我应该假设两者都同样昂贵,还是应该假设它们之间存在差异?(b) RAM 磁盘不是持久的,但如果我想将一些结果导出到持久存储,我需要采取一些预防措施吗?它和平常一样吗,例如 COPY 命令?

标签: postgresqlpostgresql-copypostgresql-12main-memory-database

解决方案


我不建议在 PostgreSQL 中使用 RAM 磁盘进行持久存储。通过仔细调整,您可以让 PostgreSQL 使用的磁盘 I/O 不会超过使数据持久化所需的磁​​盘 I/O。

我建议这样做:

  • 机器中的 RAM 大于数据库的大小。

  • 定义shared_buffers足够大以包含数据库(在 Linux 上,定义内存大页面以包含它们)。

  • 增加checkpoint_timeoutmax_wal_size获得更少的检查点。

  • 设置synchronous_commit = off为防止 PostgreSQL 在每次提交时将 WAL 同步到磁盘。

  • 如果您乐于在崩溃的情况下丢失所有数据,请定义您的表UNLOGGED。数据将在正常关机后继续存在。

无论如何,回答你的问题:

(a) 你应该设置一个更低seq_page_costrandom_page_cost值来告诉 PostgreSQL 你的存储有多快。

(b) 您可以使用pg_dump或运行备份pg_basebackup,他们不在乎您拥有什么样的存储空间。


推荐阅读