我有一个运行简单查询的RDS PostgreSQL实例,比我预期的要慢得多-特别是顺序扫描,例如复制表或计数表。
例如。 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超过1400,并且通常在500左右,远低于我的预期基数。
配置:
work_mem:2GB,
shared_buffers:3GB,
Effective_cache_size:8GB
wal_buffers:16MB,
checkpoint_segments:16
这是预期的时间吗?我应该看到更高的IOPS吗?
最佳答案
除了在9.6中实现并行顺序扫描(在RDS中尚不可用)之外,对于PostCounts中的无格式计数查询,您无能为力。
虽然有事件,但您可以找到一些技巧here。通常,建议通过创建索引及其在投影中的列,尝试使Postgres使用“仅索引扫描”。
SELECT id FROM table WHERE id > 6 and id <100;
-- or
SELECT count(id) FROM table ...
表应该在该列上有一个索引。
您作为示例公开的查询将避免顺序扫描。对于CREATE TABLE,如果您不关心表中的顺序,则可以打开一些后端,并通过按键范围进行过滤来并行导入。同样,在RDS上加快此速度的唯一方法是增加IOP。
关于postgresql - RDS上的PostgreSQL顺序扫描速度慢吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39761013/