首页 > 解决方案 > 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 个连接,所以我无法显示所有统计信息。

在此处输入图像描述

标签: postgresql

解决方案


对我来说,它看起来像应用程序问题,而不是 postresql 的问题。activestatus 表示您的事务仍未提交。

那么为什么您的应用程序可能不会发送commit到数据库?

尝试查看您的应用程序代码中的open transaction、和。read datacommit transactionrollback transaction

编辑: 顺便说一句,一定要在问题出现之前以及您的查询开始挂起时尝试​​检查资源使用情况。当问题出现时,尝试运行topiotop检查是否postgres真的开始吃你的东西cpudisk像疯了一样。如果没有,我会建议在您的应用程序中查找问题。


推荐阅读