{
  "id": "redis/stream-pending-entry-list-too-large",
  "signature": "ERR PEL too large for consumer group 'mygroup' on stream 'mystream': 50000 entries, consider trimming",
  "signature_zh": "ERR 消费者组 'mygroup' 在流 'mystream' 上的待处理条目列表过大：50000 条，请考虑修剪",
  "regex": "ERR PEL too large for consumer group '.+' on stream '.+': [0-9]+ entries, consider trimming",
  "domain": "redis",
  "category": "resource_error",
  "subcategory": null,
  "root_cause": "The pending entries list (PEL) for a consumer group has grown excessively large, consuming memory and slowing down XREADGROUP and XACK operations.",
  "root_cause_type": "generic",
  "root_cause_zh": "消费者组的待处理条目列表（PEL）增长过大，消耗内存并拖慢 XREADGROUP 和 XACK 操作。",
  "versions": [
    {
      "version": "7.2.0",
      "introduced": null,
      "deprecated": null,
      "removed": null,
      "behavior_change": null,
      "status": "active"
    },
    {
      "version": "7.4.0",
      "introduced": null,
      "deprecated": null,
      "removed": null,
      "behavior_change": null,
      "status": "active"
    },
    {
      "version": "8.0.0",
      "introduced": null,
      "deprecated": null,
      "removed": null,
      "behavior_change": null,
      "status": "active"
    }
  ],
  "os_specific": {},
  "dead_ends": [
    {
      "action": "Increasing maxmemory to accommodate the large PEL",
      "why_fails": "This only delays the problem; the PEL will continue to grow until memory is exhausted again, and it does not improve performance.",
      "fail_rate": 0.8,
      "condition": "",
      "sources": []
    },
    {
      "action": "Deleting the consumer group and recreating it",
      "why_fails": "This loses all pending entry state, potentially causing data loss if entries were not processed.",
      "fail_rate": 0.9,
      "condition": "",
      "sources": []
    },
    {
      "action": "Setting a very high XREADGROUP COUNT to read more entries",
      "why_fails": "This increases load on the server and does not reduce the PEL size; it may actually grow it faster.",
      "fail_rate": 0.7,
      "condition": "",
      "sources": []
    }
  ],
  "workarounds": [
    {
      "action": "Use XAUTOCLAIM to reclaim and acknowledge old pending entries: 'XAUTOCLAIM mystream mygroup myconsumer 3600000 0-0 COUNT 1000' then XACK each claimed entry. Repeat until PEL is reduced.",
      "success_rate": 0.85,
      "how": "Use XAUTOCLAIM to reclaim and acknowledge old pending entries: 'XAUTOCLAIM mystream mygroup myconsumer 3600000 0-0 COUNT 1000' then XACK each claimed entry. Repeat until PEL is reduced.",
      "condition": "",
      "sources": []
    },
    {
      "action": "Implement a periodic cleanup job in the consumer that checks PEL size via XINFO GROUPS and automatically trims old entries using XDEL after confirming they are no longer needed",
      "success_rate": 0.8,
      "how": "Implement a periodic cleanup job in the consumer that checks PEL size via XINFO GROUPS and automatically trims old entries using XDEL after confirming they are no longer needed",
      "condition": "",
      "sources": []
    }
  ],
  "workarounds_zh": [
    "Use XAUTOCLAIM to reclaim and acknowledge old pending entries: 'XAUTOCLAIM mystream mygroup myconsumer 3600000 0-0 COUNT 1000' then XACK each claimed entry. Repeat until PEL is reduced.",
    "Implement a periodic cleanup job in the consumer that checks PEL size via XINFO GROUPS and automatically trims old entries using XDEL after confirming they are no longer needed"
  ],
  "transition_graph": {
    "leads_to": [],
    "preceded_by": [],
    "frequently_confused_with": []
  },
  "official_doc_url": "https://redis.io/docs/data-types/streams/",
  "official_doc_section": null,
  "error_code": "ERR",
  "verification_tier": "ai_generated",
  "confidence": 0.86,
  "fix_success_rate": 0.79,
  "resolvable": "true",
  "first_seen": "2024-08-22",
  "last_confirmed": "2024-06-01",
  "last_updated": "2024-06-01",
  "evidence_count": 1,
  "tags": [],
  "locale": "en",
  "aliases": []
}