如何解决PgSQL 花费太多时间太响应
最近几天我在数据库方面遇到了一个奇怪的问题。一个简单的查询花费了太多时间,当我尝试将我的 aws rds 与 pgadmin 连接时,它会在几秒钟后断开连接。这个问题以前没有出现过。我不知道如何解决这个问题
这是我的 aws rds 的统计数据:
执行计划:
Aggregate (cost=9315.62..9315.63 rows=1 width=8) (actual time=59379.535..59379.536 rows=1 loops=1)
Buffers: shared hit=32669 dirtied=5
-> Index Only Scan using users_pkey on users (cost=0.42..8758.99 rows=222652 width=0) (actual time=0.058..41652.438 rows=223966 loops=1)
Heap Fetches: 33168
Buffers: shared hit=32669 dirtied=5
Planning time: 0.653 ms
Execution time: 59439.600 ms
这是场景。 我正在调用一个 api,其中我的代码执行 2 或 3 个查询。如果对 db 的简单查询需要 15 秒,那么普通查询将需要 30 秒以上,每当我的 api 需要 30 秒以上时,Heroku 服务器就会抛出 H12(503 服务不可用)错误,并且我的前端不会呈现任何内容。所以我想弄清楚为什么 rds db 需要太多时间来响应一个应该在毫秒内响应的简单 db 查询。有关信息,我正在分享 api 的细分表之一。我们可以清楚地看到数据库占用了 90% 的时间。
解决方法
计数是一项缓慢的工作 - 您必须扫描所有行才能对其进行计数。
也就是说,您可以通过在表上运行 VACUUM
来加快仅索引扫描的速度,从而减少“堆提取”(检查元组可见性)的次数。
除此之外,唯一的改进可能是用 VACUUM (FULL)
重写表以消除膨胀。但不要忘记在执行此操作后再次VACUUM
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。