我有一个运行简单查询的 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 超过 1,400,通常在 500 左右,远低于我的预期基数。
配置: 工作内存:2GB, 共享缓冲区:3GB, 有效缓存大小:8GB wal_buffers:16MB, 检查点_段:16
这是预期的时间吗?我应该看到更高的 IOPS 吗?
最佳答案
除了 9.6 中实现并行顺序扫描的 9.6 之外,您无法像在 Postgres 中那样围绕普通计数查询做很多事情,这在 RDS 中尚不可用。
尽管是事件,但您可以找到一些提示 here .通常,建议尝试通过在投影中创建索引及其列来使 Postgres 使用仅索引扫描。
SELECT id FROM table WHERE id > 6 and id <100;
-- or
SELECT count(id) FROM table ...
表应该在该列上有一个索引。
您作为示例公开的查询不会避免顺序扫描。对于CREATE TABLE,如果不关心表中的顺序,可以开几个后端,通过key range过滤,并行导入。此外,在 RDS 上加速此操作的唯一方法是增加 IOP。
关于postgresql - RDS 上的 PostgreSQL 顺序扫描速度慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39761013/