postgresql - 在 RAMdisk 上进行 PostgreSQL 基准测试?
问题描述
我一直在考虑迁移到 RAMdisk 的想法。我知道它的风险,但只是想做一个小基准。我只有两个问题:(a)在读取查询计划时,它是否仍能区分磁盘命中和缓冲区命中?如果是这样,我应该假设两者都同样昂贵,还是应该假设它们之间存在差异?(b) RAM 磁盘不是持久的,但如果我想将一些结果导出到持久存储,我需要采取一些预防措施吗?它和平常一样吗,例如 COPY 命令?
解决方案
我不建议在 PostgreSQL 中使用 RAM 磁盘进行持久存储。通过仔细调整,您可以让 PostgreSQL 使用的磁盘 I/O 不会超过使数据持久化所需的磁盘 I/O。
我建议这样做:
机器中的 RAM 大于数据库的大小。
定义
shared_buffers
足够大以包含数据库(在 Linux 上,定义内存大页面以包含它们)。增加
checkpoint_timeout
并max_wal_size
获得更少的检查点。设置
synchronous_commit = off
为防止 PostgreSQL 在每次提交时将 WAL 同步到磁盘。如果您乐于在崩溃的情况下丢失所有数据,请定义您的表
UNLOGGED
。数据将在正常关机后继续存在。
无论如何,回答你的问题:
(a) 你应该设置一个更低seq_page_cost
的random_page_cost
值来告诉 PostgreSQL 你的存储有多快。
(b) 您可以使用pg_dump
或运行备份pg_basebackup
,他们不在乎您拥有什么样的存储空间。
推荐阅读
- reactjs - 我必须做什么才能让我的路由器路径正常工作?
- r - 加入2个数据框
- php - PHP Laravel 应用程序令牌不匹配异常错误
- swift - 如何快速解开可选值?
- amazon-web-services - 使用 aws cognito 的最佳实践
- spring-data-jpa - 如何将实体关系中的特定 Envers 修订定位到@Audited 实体?
- c++ - 如何读取字符串中的最后一个字符
- android - Android Studio 谷歌地图 api 和 API 密钥用于发布
- javascript - 当布尔值变为假时,检查 5 秒是否会变回真,否则执行一些操作
- javascript - 为什么 .setHours(0,0,0,0) 会导致 T07:00:00.000Z