具有超过十亿行的表的Postgres性能
问题描述:
我正在做一个PoC来检查Postgres是否适合我们的用例。具有超过十亿行的表的Postgres性能
我有以下工作量:
数据查询: 表示层将检索数据每15分钟为过去2周
数据负载: 每隔15分钟,5万行的数据被加载到一个表中,我发现它的负载消耗375MB。 每天,这将是4.8亿行,表格大小为36GB。
在我加载了数天的数据(表中约有1亿行)之后,我跑了很少的查询,并且观察到select查询在几个小时内没有响应。例如选择计数(*)..并选择* ..简单但繁重的查询。没有加入。
我的要求是每15分钟加载一次数据并存储几个月,但我还没有达到那么远。即使有数天的数据用于上述工作负载,我也观察到select查询没有响应。
我想知道postgres是否对这种工作负载有任何限制,或者如果我没有调整它的权利!我错过配置任何关键参数吗?
我已经通过postgres官方文档()上的限制,我的要求还没有真正达到postgres中指定的理论限制。
Postgres配置: 下面是我配置的postgres参数。
checkpoint_completion_target | 0.9
default_statistics_target | 500
effective_cache_size | 135GB
maintenance_work_mem | 2GB
max_connections | 50
max_stack_depth | 2MB
max_wal_size | 8GB
min_wal_size | 4GB
shared_buffers | 45GB
wal_buffers | 16MB
work_mem | 471859kB
服务器配置:
虚拟化硬件!
个vCPU:32
RAM:200GB
不知Postgres的需要一个实际的专用硬件。也许它不能在虚拟硬件上处理这个负载!
欣赏如果您对此有任何意见或建议。 BR/Nag
答
问题不是PostgreSQL,而是硬件,你将如何调整数据库。事实上,雅虎,Reddit,Yandex和其他公司都使用它。 从9.6开始有paralell queries,所以你可以更有效地利用你的CPU。
你正在运行什么类型的查询?有了这种数据量,您通常需要OLAP类型的分析查询和数据重组/汇总。 –
'...简单但沉重的查询。没有加入......这种查询没有优化的余地。需要所有行的查询将需要获取所有页面。 – joop
你需要优化你的硬件以获得快速的磁盘读取,因为你没有希望在内存中缓存那么多的数据。对于某些查询,您可能会提供物化视图或其他优化以提高性能。 –