我在 AWS 上有一个 t3.micro Postgres 实例,它存在一些严重的性能问题。
在我的本地机器上,一个简单的选择查询运行时间为 10 秒。在 AWS 上,运行时间为 40 秒。相同的查询,相同的工作器数量。Performance Insights 表明,这可能是由于“DataFileRead”负载高于我的 vCPU 数量,但我不知道如何解决这个问题(除了获取更大的实例)。
任何帮助将非常感激!
以下是解释分析查询:
“快速”查询
“查询计划” “收集(成本=1000.00..575799.88 行=17407 宽度=2062)(实际时间=38.317..10467.481 行=16335 循环=1)” “计划中的工人:2” “启动的工人:2” “-> infousa_2019 上的并行序列扫描(成本=0.00..573059.18 行=7253 宽度=2062)(实际时间=16.792..10343.333 行=5445 循环=3)” “过滤器:((员工 >= '20'::numeric)AND((市场)::text = '波士顿-剑桥-牛顿,MA-NH 大都会区'::text))” “过滤器删除的行:3043343” “计划时间:3.478 毫秒” “执行时间:10468.554 毫秒”
慢查询:
“收集(成本=1000.00..1036178.66 行=16967 宽度=1080)(实际时间=23205.945..57724.828 行=16335 循环=1)” “计划中的工人:2” “启动的工人:2” “-> infousa_2019 上的并行序列扫描(成本=0.00..1033481.96 行=7070 宽度=1080)(实际时间=23179.979..57598.163 行=5445 循环=3)” “过滤器:((员工 >= '20'::numeric)AND((市场)::text = '波士顿-剑桥-牛顿,MA-NH 大都会区'::text))” “通过过滤器删除的行:3043343” “计划时间:25.280 毫秒” “执行时间:57730.038 毫秒”
答案1
事实上,答案很简单。我只需要在市场栏目上重新索引整个数据库。