gpt4 book ai didi

PostgreSQL 将自身限制为单核 CPU 使用率(调试锁问题?)

转载 作者:行者123 更新时间:2023-11-29 13:38:54 25 4
gpt4 key购买 nike

Update after some research, it seems this question was incorrect - the 100% was representing all cores, not a single core, making the whole question moot. My sincere apologies to the community.

在 PostgreSQL 10、PostGIS 2.5.2 上,没有任何数据修改(仅限 SELECT 查询),我有 40 个相同的 GIS 查询并行运行(具有不同的参数),每个查询大约需要 20-500 毫秒.服务器有大量 RAM,NVME SSD。

CPU 使用率始终显示 100% 的单核,这意味着所有查询都在等待无法并行执行的内容,但我不确定如何找到它。

多次检查 pg_stat_activity 显示所有查询都处于事件状态,并且它们的 wait_event 可能是以下情况之一:

  • wait_event 对所有人都是 NULL
  • 一些 ClientReadlock_manager,其他都为 NULL
  • 很多 lock_manager,还有一些 ClientRead 和 NULL。

有没有办法找出可能导致这种情况的原因?

最佳答案

这是令人惊讶的,因为读取查询永远不会锁定任何ACCESS EXCLUSIVE 锁之外的任何东西,而DROP TABLETRUNCATE 等操作所需的锁>、ALTER TABLE 和类似语句。

也许锁是内部 PostgreSQL 数据结构上的“轻量级锁”,通常只持有很短的时间。我不知道 PostGIS 查询中的什么可能对此类内部锁有高争用,但是您没有显示语句或其执行计划,也没有显示确切的锁定事件。

如果您有多个并发查询,每个查询都需要很长时间(例如 500 毫秒),那么绝对应该并行运行。

除了一些内部锁争用的可能性外,我可以想到两种解释:

  1. 大多数查询都足够短,单个内核足以处理所有查询。每个连接的大部分时间都在等待客户端。

  2. 该系统受 I/O 限制,因此大多数 CPU 只是摆弄他们的拇指。这将由 10 或更多的 CPU iowait% 表示。

关于PostgreSQL 将自身限制为单核 CPU 使用率(调试锁问题?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58443317/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com