postgresql - PostgreSQL:后端进程长时间处于活动状态
问题描述
现在我遇到了一个很大的路障。
我使用 PostgreSQL 10 及其新的表分区。
有时许多查询不会返回,而当时许多后端进程是active
当我通过pg_stat_activity
. 首先,我认为这些进程只是在等待lock
,但是这些事务只包含SELECT
语句,而另一个后端不使用任何需要ACCESS EXCLUSIVE
锁定的查询。而这些只包含SELECT
语句的查询在计划上是没有问题的。通常这些都很好用。并且计算机资源(CPU、内存、IO、网络)也没有问题。因此,这些交易不应发生冲突。而且我仔细检查了这些事务的锁,pg_locks
最后pg_blocking_pids()
我找不到任何使查询变慢的锁。许多活跃的后端仅ACCESS SHARE
因为它们仅使用SELECT
. 现在我认为这些现象不是由锁引起的,而是与新表分区有关。
那么,为什么许多后端处于活动状态?有人可以帮我吗?任何意见都受到高度赞赏。打击图是 的结果的一部分pg_stat_activity
。如果您需要任何其他信息,请告诉我。
编辑
我的查询不处理大数据。返回类型是这样的:
uuid UUID
,number BIGINT
,title TEXT
,type1 TEXT
,data_json JSONB
,type2 TEXT
,uuid_array UUID[]
,count BIGINT
因为它有JSONB
列,所以我无法计算出确切的值,但它不是很大的 JSON。通常这些查询都比较快(大约1.5s),所以绝对没有问题,但是当其他进程工作时,就会出现这种现象。如果统计信息有误,查询总是很慢。
编辑2
这是统计。几乎有 100 个连接,所以我无法显示所有统计信息。
解决方案
对我来说,它看起来像应用程序问题,而不是 postresql 的问题。active
status 表示您的事务仍未提交。
那么为什么您的应用程序可能不会发送commit
到数据库?
尝试查看您的应用程序代码中的open transaction
、和。read data
commit transaction
rollback transaction
编辑:
顺便说一句,一定要在问题出现之前以及您的查询开始挂起时尝试检查资源使用情况。当问题出现时,尝试运行top
并iotop
检查是否postgres
真的开始吃你的东西cpu
或disk
像疯了一样。如果没有,我会建议在您的应用程序中查找问题。
推荐阅读
- android - 强制 Android Webview 使用 Chrome 或 Firefox
- c# - 使用多个显示器和不同 DPI 查找虚拟屏幕宽度
- html - CSS 不工作,我在做什么,我检查了所有部分并进行了硬刷新,但它不工作?
- intellij-idea - 辅助监视器上的 IntelliJ IDEA 组窗口
- google-cloud-platform - Cloud Scheduler 页面访问问题 - 共享项目
- javascript - 如何对其中包含随机生成的数字的卡片列表进行排序?
- swift - swift中的MacOS动画延迟
- ios - 是否可以将应用程序作为 iOS OPEN Beta 发布?
- python - 在模板内切片 paginator.page_range
- docker - 如何从 Dockerfile 中的入口点发出超时命令