【发布时间】:2018-12-20 13:32:48
【问题描述】:
现在我遇到了一个很大的障碍。
我使用 PostgreSQL 10 及其新的表分区。
当我通过pg_stat_activity 检查后端进程时,有时许多查询不会返回,而当时许多后端进程都是active。
首先,我认为这些进程只是在等待lock,但这些事务只包含SELECT 语句,而另一个后端不使用任何需要ACCESS EXCLUSIVE 锁定的查询。而这些只包含SELECT 语句的查询在计划上是没有问题的。通常这些都很好用。并且计算机资源(CPU、内存、IO、网络)也没有问题。因此,这些交易不应发生冲突。而且我通过pg_locks 和pg_blocking_pids() 仔细检查了这些事务的锁,最后我找不到任何使查询变慢的锁。许多活动的后端仅保留ACCESS SHARE,因为它们仅使用SELECT。
现在我认为这些现象不是锁引起的,而是与新表分区有关。
那么,为什么许多后端处于活动状态?
有人可以帮我吗?
任何 cmets 都受到高度赞赏。
打击图是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),所以绝对没有问题,但是当其他进程工作时,就会出现这种现象。
如果统计信息有误,查询总是很慢。
EDIT2
这是统计数据。有将近 100 个连接,所以我无法显示所有统计信息。
【问题讨论】:
-
1) 当您的查询从表中返回大量数据并且您在查询工具上显示该数据而不是插入其他表或进行任何其他操作时,有时会发生这种情况。您不应该查询以显示大数据 2) 或者可能是因为缺少统计信息。在那张桌子上分析和吸尘。你能发布查询和它返回的数据量吗
-
你能发布完整的统计数据吗?请检查拥有该进程的 pg_stat_activity 下的应用程序名称。类似,application_name | PostgreSQL JDBC 驱动程序 client_addr | 127.0.0.1
-
在生产中遇到类似问题,有时活动查询的数量会达到 ±200。在我的情况下,所有查询都是不同的并且正在查询不同的表,但是,与您的情况相同,没有被任何写入锁定。在调查过程中,我们尝试使用
work_mem和shared_buffers,它确实有帮助。在你的情况下,我会走同样的路。我们正在通过 DataDog 监控我们的数据库服务器,如果您有类似的监控可用,您应该能够调整配置以帮助解决您的问题。我们使用的是 9.3 和非分区表。 -
如果我们的情况相似,您很可能遇到了 Postgres 队列重新分配内存给进程的问题。只是我的猜测。我真的很想知道你将如何解决这个问题,所以一定要回帖。
-
@Mohamed Anees A 见 EDIT2。我展示了,但你为什么要看到它?我不明白你为什么要检查 application_names。
标签: postgresql