Running into limits can cause unexpected failures. Knowing Temporal's limits can prevent that.
This page details many of the hard and soft limits that are coded into the Temporal Platform. Hard limits fail with an error; soft limits produce a warning log on the server side.
- Identifiers: By default, the maximum length for identifiers (like Workflow Id, Workflow Type, and Task Queue name) is 1000 characters.
- This is configurable with the
limit.maxIDLength
dynamic config, which is set to 255 in our SQL example. - The character format is UTF-8.
- This is configurable with the
- gRPC: gRPC has a limit of 4 MB for each message received.
- Event batch size: The
DefaultTransactionSizeLimit
limit is 4 MB. This is the largest transaction size we allow for Event Histories to be persisted. - Blob size limit for Payloads (including Workflow context and each Workflow and Activity argument and return value; source):
- We warn at 256 KB: Blob size exceeds limit.
- We error at 2 MB:
ErrBlobSizeExceedsLimit: Blob data size exceeds limit.
- This is configurable with BlobSizeLimitError and BlobSizeLimitWarn, if you know what you are doing.
- History total size limit (leading to a terminated Workflow Execution):
- We warn at 10 MB:
history size exceeds warn limit
. - We error at 50 MB: history size exceeds error limit.
- This is configurable with HistorySizeLimitError and HistorySizeLimitWarn, if you know what you are doing.
- We warn at 10 MB:
- History total count limit (leading to a terminated Workflow Execution):
- We warn at 10,000 Events:
history size exceeds warn limit
. - We error at 50,000 Events: history size exceeds error limit.
- This is configurable with HistoryCountLimitError and HistoryCountLimitWarn, if you know what you are doing.
- We warn at 10,000 Events:
- Concurrent Action limit
- We fail the following action Commands on Cloud if the concurrent running count exceeds 2,000:
ScheduleActivityTask
SignalExternalWorkflowExecution
RequestCancelExternalWorkflowExecution
StartChildWorkflowExecution
- The open-source Temporal Cluster does not have a default limit, but you can set them in the dynamic configuration using these variables:
limit.numPendingActivities.error
limit.numPendingSignals.error
limit.numPendingCancelRequests.error
limit.numPendingChildExecutions.error
- We fail the following action Commands on Cloud if the concurrent running count exceeds 2,000:
- Search Attributes maximums
Default limits for Temporal Cloud
- Account level
- Namespaces: 10
- Prometheus endpoint Retention Period: 1 month
- Namespace level
- Actions per second: 200 (with spikes to 400)
- Certificates: 32-KB payload or 16 certificates, whichever is smaller
- Concurrent Task pollers: 2,000 (configurable; maximum of 100,000)
- Custom Search Attributes (maximum per type)
- bool: 20
- double: 20
- datetime: 20
- int: 20
- keyword: 20
- text: 5
- Retention Period: 30 days (configurable; range of 1–90 days)