我正在做一个PoC来检查Postgres是否适合我们的用例。
我有以下工作量:
数据查询 表示层将在过去两周内每15分钟检索一次数据
数据加载: 每隔15分钟,将500万行数据加载到表格中,我发现该负载消耗了375MB。 每天,它将是4.8亿行,表格大小为36GB。
我加载数据几天后(表中大约有1亿行),我运行了几个查询,我发现选择的查询几小时没有响应。例如select count(*)..并选择* ..简单但繁重的查询。没有加入。
我的要求是每15分钟加载一次数据并存储几个月,但我还没有达到那么远。即使有上述工作负载的几天数据,我发现选择查询没有响应。
我想知道postgres是否对这种工作负载有任何限制,或者我没有正确调整它!我是否错过了配置任何关键参数?
我已经通过postgres官方文档(https://www.postgresql.org/about/)了解了限制,我的要求并没有真正达到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
服务器配置:
虚拟化硬件!
vCPUs:32
RAM:200GB
我想知道postgres是否需要物理专用硬件。也许它无法处理虚拟化硬件的负载!
感谢您对此有任何意见或建议。 BR /纳格
答案 0 :(得分:1)
问题不是PostgreSQL而是硬件以及如何调整数据库。实际上雅虎,Reddit,Yandex和其他人都使用它。 从9.6开始有paralell queries,因此您可以更有效地利用CPU。
答案 1 :(得分:1)
您可以通过一些配置步骤来了解这些大量数据,从而获得更好,更快的响应。您可以使用多租户方法,为数据库编制索引,使用Linux基本系统而不是Windows。
This链接可以帮助您将这些方面与其他方面一起排序。
答案 2 :(得分:0)
从开源数据库的角度来看,Postgres是处理和处理大型数据集的公认方式之一。 Postgres不会成为问题,但还需要考虑其他重要因素,例如数据库设计和硬件配置。
对于存储和查询大数据集,从数据库设计的角度来看,表分区和索引编制的概念将更为有用。表分区功能在postgres 11/10 / 9.6 / 9.5中可用。文档链接-Table Partition
CREATE TABLE IF NOT EXISTS parent_tbl
(
id bigint,
sp_id integer,
name varchar,
month_year date,
);
PARTITION TABLE(PARTITION BY sp_id)INHERT TABLE parent_tbl
CREATE TABLE IF NOT EXISTS tbl_partition_1
(
CHECK (sp_id=1)
)INHERITS (parent_tbl);
CREATE INDEX ON tbl_partition_1(month_year);
CREATE TABLE IF NOT EXISTS tbl_partition_2
(
CHECK (tsp_id=2)
)INHERITS (parent_tbl);
CREATE INDEX ON tbl_partition_2(month_year);
CREATE TABLE IF NOT EXISTS tbl_partition_3
(
CHECK (tsp_id=3)
)INHERITS (parent_tbl);
CREATE INDEX ON tbl_partition_3(month_year);