我在AWS RDS Postgres实例化视图上的简单查询返回缓慢(2-3分钟).我的工作假设是,这是一个网络传输问题,但我不是Postgres方面的专家.有关设置的一些背景知识:
- "x86_64-PC-LINUX-GNU上的PostgreSQL 10.21,由x86_64-PC-LINUX-GNU-GCC(GCC)7.4.0编译,64位",
- 在RDS、16个Aurora单元上以无服务器模式运行此程序
- 这个过程是通过一个AWS VPN Connection
- 该表大约有50M rows,30列,当前总大小为20 GB
- 我已经在视图上放置了一个多列索引(2个感兴趣的列).其中一个具有~100K的唯一值,每个化合物大约1000行,另一个具有~500个唯一值,每个基因的范围为100K-2M行
当我 run 的时候:
SELECT * FROM my_materialized_view where "COMPOUND" = 'cpd1234';
该查询返回~3-5秒.
当我 run 的时候:
SELECT * FROM my_materialized_view where "GENE" = 'geneXYZ';
该查询需要大约2分钟才能返回1M行.返回的数据大小显示为100-200MB.
做一些稍微有些"异国情调"的事情:
SELECT * FROM my_materialized_view where "GENE" = 'geneXYZ' ORDER BY 'measured_value' LIMIT 10000;
在大约12秒内返回数据.
我还跑了:
EXPLAIN ANALYZE SELECT * FROM my_materialized_view where "GENE" = 'geneXYZ';
输出似乎表明该过程大约为500ms
"对MY_MATERIALIZED_VIEW使用MY_MATERIALIZED_VIEW_IDX进行索引扫描(成本=0.56..1415484.25行=922393宽度=922393)(实际时间=437.332行=979434循环=1)" "索引条件:(""gene""=‘genXYZ’::Text)" "计划时间:0.092毫秒" "执行时间:491.306毫秒"
我是理解错了还是数据传输/网络延迟有问题?我使用pgadmin进行查询,但也通过pythonboto3运行查询,实现了相同的时间.感谢您对此的看法.谢谢!