在RDS上慢速PostgreSQL顺序扫描?

时间:2016-09-29 03:39:23

标签: postgresql amazon-web-services rds

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

EG。 create table copied_table as (select * from original_table)select count(*) from some_table

在30GB的桌面上运行count(*)需要大约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吗?

1 个答案:

答案 0 :(得分:1)

除了在9.6中实现并行顺序扫描(在RDS中尚不可用)之外,你可以在Postgres中使用普通计数查询做很多事情。

事件虽然,您可以找到一些提示here。通常,建议尝试通过在投影中创建索引及其列来使Postgres使用仅索引扫描

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

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

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