在RDS上慢速PostgreSQL顺序扫描?

jas*_*str 8 postgresql rds amazon-web-services

我有一个运行简单查询的RDS PostgreSQL实例,比我预期的要慢得多 - 特别是顺序扫描,比如复制表或计算表.

例如.create table copied_table as (select * from original_table)要么select count(*) from some_table

count(*)在30GB的桌面上运行需要大约15分钟(带有索引,紧接着一个真空).

它是一个RDS db.r3.large,15 GB内存,400GB SSD.观察指标日志,我从未见过读取IOPS超过1,400,通常在500左右,远低于我的预期基数.

配置:work_mem:2GB,shared_buffers:3GB,effective_cache_size:8GB wal_buffers:16MB,checkpoint_segments:16

这是预期的时间吗?我应该看到更高的IOPS吗?

3ma*_*uek 1

对于像 Postgres 中那样的普通计数查询,您无能为力,除了在 9.6 中实现了并行顺序扫描(RDS 中尚不可用)。

不过,您可以在这里找到一些提示。一般来说,建议尝试通过在投影中创建索引及其列来使 Postgres 使用Index Only Scan 。

SELECT id FROM table WHERE id > 6 and id <100;
-- or
SELECT count(id) FROM table ...
Run Code Online (Sandbox Code Playgroud)

表应该在该列上有一个索引。

您作为示例公开的查询不会避免顺序扫描。对于CREATE TABLE,如果你不关心表中的顺序,你可以打开几个后端并通过按键范围过滤来并行导入。此外,在 RDS 上加速这一过程的唯一方法是增加 IOP。

  • 谢谢,但我希望确认我的 PostgreSQL 配置正确,并且我从 RDS 获得了应有的性能。 (4认同)