小编Mat*_* SM的帖子

Postgresql 提高大表中的选择性能/并行性

我有一个巨大的表(> 30 亿行,总计 3 TB),使用 Postgres 9.5 定义如下:

CREATE TABLE user_events
(
    user_id VARCHAR NOT NULL,
    datetime BIGINT NOT NULL,
    field1 VARCHAR,
    field2 VARCHAR,
    field3 VARCHAR,
    field4 VARCHAR,
    field5 VARCHAR,
    CONSTRAINT user_events_user_id_datetime_pk PRIMARY KEY (user_id, datetime)
);

alter table user_events set (autovacuum_vacuum_cost_delay=10);
Run Code Online (Sandbox Code Playgroud)

我需要大约每秒 2000 次查询这个表,但我无法进行足够的并行化(我达到了大约一半)。

使用以下准备好的语句,我得到了合理的(我想)响应时间:

PREPARE getact AS select * from user_events where user_id = $1 order by datetime limit 1000;

explain analyze EXECUTE getact('xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx');
Run Code Online (Sandbox Code Playgroud)
CREATE TABLE user_events
(
    user_id VARCHAR NOT NULL,
    datetime BIGINT NOT NULL,
    field1 VARCHAR, …
Run Code Online (Sandbox Code Playgroud)

postgresql performance postgresql-9.5 query-performance performance-tuning

5
推荐指数
1
解决办法
875
查看次数