Batch large DB requests to avoid transaction size limits

XMLWordPrintable

    • Type: Change Request
    • Resolution: Unresolved
    • Priority: Trivial
    • None
    • Affects Version/s: 7.0.26, 7.4.10, 8.0.0alpha2
    • Component/s: Frontend (F)
    • None

      Modifying shared entities (templates, item/trigger prototypes) forces the Zabbix frontend to propagate changes to all inherited or discovered entities within a single, monolithic database transaction.

      On large-scale environments, updating a widely assigned template or a heavy prototype triggers a massive cascading database operation. For example, if a template generates 500 items via LLD and is linked to 100 hosts, updating one prototype pushes a huge UPDATE statement in one operation block. 

      This architecture causes several critical operational issues:

      • Frontend: Pushes PHP past max_execution_time thresholds and triggers PHP timeouts
      • DB Limits: Exceeds database transaction size limits, WAL capacity, or maximum memory allocation per transaction.
      • Locking: Long-running updates lock core configuration tables, which blocks the Zabbix server configuration syncer and creates replication lag.

      It should be really nice to implement a chunking/batching mechanism within the frontend and API engine for configuration updates:

      • Split mass entity updates into distinct chunks.
      • Execute and commit each chunk in its own separate database transaction.
      • Implement error handling to manage partial failures safely without locking or corrupting the remaining configuration.

            Assignee:
            Valdis Murzins
            Reporter:
            Maksym Buz
            Votes:
            6 Vote for this issue
            Watchers:
            3 Start watching this issue

              Created:
              Updated: