为单连接使用调整 Postgres?还是 postgres 错误的工具?

nic*_*_eu 6 postgresql concurrency database-tuning configuration

拇指的任何规则work_memmaintenance_work_memshared_buffer等,为的是不预期的并发连接,并且正在做大量的聚集功能的数据库?

我是一名社会科学家,不希望将 Postgres 用作供多个用户共享的数据库,而是作为我自己的工具来操作海量数据集(我有 50 亿条交易记录(csv 中为 600gb)并想退出唯一用户对、估计单个用户的聚合等)。

我可以在网上找到的所有关于调优的建议(这个这个这个等等)都是为那些预计会有大量并发连接的人写的。对于单独使用数据库进行数据操作的人来说,任何人都有基本的经验法则吗?

更新: - 这也意味着几乎没有写入,除了根据主表中的选择创建新表。(显然这很重要——谢谢欧文!)

更新 2: - 我在 Windows 8 VM 上使用 16gb ram、SCSI VMware HD 和 3 个内核(如果这很重要)。

nic*_*_eu 2

从这个 Postgres listserv 得到了一些关于这个问题的反馈,所以我想在这里分享:

杰夫:

我会选择一个小的共享缓冲区,比如 128MB,并让操作系统尽可能多地缓存。这最大限度地减少了双缓冲的数量。

将 work_mem 设置为大约 6GB,如果这似乎不会引起问题,则将其增加。

在您描述的场景中,如果您猜测得太高,可能没什么大不了的。监视该进程,如果它开始发疯,只需杀死它并以较低的 work_mem 重新开始。如果它是单用户系统,您就可以冒险。

如果您需要构建索引,则应该增加maintenance_work_mem,但我只会在本地会话中而不是在系统范围内执行此操作。

来自加文:

对于不变的表,请考虑 100% 的填充密度。

请注意如何设计表和列类型。

仔细考虑您可能使用的查询,以便您可以设计适当的索引。