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吗?
对于像 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。
| 归档时间: |
|
| 查看次数: |
512 次 |
| 最近记录: |