{"record":{"id":"e33da90bf3427e65","repo":"SigNoz/signoz","slug":"resource-time-limit-exceeded-try-applying-filters","errorCode":null,"errorMessage":"resource time limit exceeded, try applying filters such as service.name, etc. to reduce the data size","messagePattern":"resource time limit exceeded, try applying filters such as service\\.name, etc\\. to reduce the data size","errorType":"error_code","errorClass":"ResourceLimitError","httpStatus":400,"severity":"error","filePath":"pkg/query-service/errors/clickhouse.go","lineNumber":9,"sourceCode":"package errors\n\nimport \"errors\"\n\nvar (\n\t// ErrResourceBytesLimitExceeded is returned when the resource bytes limit is exceeded\n\tErrResourceBytesLimitExceeded = NewResourceLimitError(errors.New(\"resource bytes limit exceeded, try applying filters such as service.name, etc. to reduce the data size\"))\n\t// ErrResourceTimeLimitExceeded is returned when the resource time limit is exceeded\n\tErrResourceTimeLimitExceeded = NewResourceLimitError(errors.New(\"resource time limit exceeded, try applying filters such as service.name, etc. to reduce the data size\"))\n)\n\ntype ResourceLimitError struct {\n\terr error\n}\n\nfunc NewResourceLimitError(err error) error {\n\treturn &ResourceLimitError{err: err}\n}\n\nfunc (e *ResourceLimitError) Error() string {\n\treturn e.err.Error()\n}\n\nfunc (e *ResourceLimitError) Unwrap() error {\n\treturn e.err\n}\n","sourceCodeStart":1,"sourceCodeEnd":27,"githubUrl":"https://github.com/SigNoz/signoz/blob/5069bf80b08f1f00d7e014eccc09902f9871004f/pkg/query-service/errors/clickhouse.go#L1-L27","documentation":"Companion to the bytes limit: ErrResourceTimeLimitExceeded fires when a ClickHouse query runs longer than the configured wall-clock/thread-time budget. SigNoz wraps it in ResourceLimitError so callers can present the filter suggestion.","triggerScenarios":"Broad, high-cardinality queries (group by high-cardinality tag, regex matches over all spans) that scan within byte limits but exceed the timeout, often under cluster load or with slow disks.","commonSituations":"Heavy concurrent dashboards saturating ClickHouse; queries with like/regex filters that cannot use indexes; after data growth without tuning; replicas down reducing available CPU.","solutions":["Narrow the query with service.name / operation filters and a shorter time window","Inspect ClickHouse system.query_log for the offending query's read rows and elapsed time, then add a skip index or TTL","If legitimate, raise max_execution_time (or the SigNoz time limit) and scale ClickHouse resources"],"exampleFix":"-- before\nSELECT ... FROM signoz_traces WHERE timestamp > now() - INTERVAL 30 DAY\n-- after\nSELECT ... FROM signoz_traces WHERE serviceName = 'frontend' AND timestamp > now() - INTERVAL 1 DAY","handlingStrategy":"retry","validationCode":"// cannot fully prevent server-side timeouts, but pre-narrow:\nif window > 24*time.Hour && service == \"\" {\n    window = 24 * time.Hour\n}","typeGuard":"func IsResourceTimeLimit(err error) bool {\n    var rle *errors.ResourceLimitError\n    return errors.As(err, &rle) && errors.Is(err, errors.ErrResourceTimeLimitExceeded)\n}","tryCatchPattern":"const attempts = 3\nfor i := 0; i < attempts; i++ {\n    resp, err = runQuery(ctx, q)\n    if err == nil || !IsResourceTimeLimit(err) { break }\n    window /= 2 // exponential backoff via narrower range\n}","preventionTips":["Avoid high-cardinality group-bys over long ranges","Set client-side timeouts below the server limit so errors surface locally","Use retries with progressively narrower windows or coarser step","Keep ClickHouse replicas healthy; check system.query_log for slow queries"],"tags":["clickhouse","timeout","resource-limits","query-cost"],"backgroundTag":"query-execution-time-limit-exceeded","analyzedSha":"5069bf80b08f1f00d7e014eccc09902f9871004f","analyzedAt":"2026-08-28T06:22:12.824Z","schemaVersion":2},"datasetVersion":"2026-08-28T11:17:15.048Z"}