RDS上PostgreSQL顺序扫描缓慢?

8
我有一个RDS PostgreSQL实例,正在运行一些简单的查询,但速度比我预期的要慢得多,特别是顺序扫描,例如复制表或计算表。例如:create table copied_table as (select * from original_table) 或者 select count(*) from some_table。在30GB的表上运行count(*)大约需要15分钟(带索引,紧随一个vacuum之后)。这是一个RDS db.r3.large,内存为15GB,400GB SSD。通过观察指标日志,我从未见过Read IOPS超过1,400,并且通常在500左右,远低于我的基准预期。
配置如下: work_mem: 2GB, shared_buffers: 3GB, effective_cache_size: 8GB, wal_buffers: 16MB, checkpoint_segments: 16
这个时间是否符合预期?我应该看到更高的IOPS吗?
1个回答

1

在Postgres中,对于像这样的普通计数查询,除了9.6实现的并行顺序扫描(目前在RDS中不可用)之外,你没有太多可以做的。

尽管如此,你可以在这里找到一些提示。通常建议通过创建索引和将其列投影来尝试使Postgres使用仅索引扫描

SELECT id FROM table WHERE id > 6 and id <100;
-- or
SELECT count(id) FROM table ...

表格应该在该列上建立索引。

您所示例的查询将无法避免顺序扫描。对于CREATE TABLE,如果您不关心表格中的顺序,可以打开几个后端并通过按键范围进行筛选来并行导入。此外,在RDS上加速此过程的唯一方法是增加IOPs。


4
谢谢,但我希望确认我的PostgreSQL已正确配置,并且从RDS中得到了应有的性能表现。 - jastr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接