{"record":{"id":"77a4a583e784dc29","repo":"SigNoz/signoz","slug":"exceeded-maximum-resolution-of-11-000-points-per-t","errorCode":null,"errorMessage":"exceeded maximum resolution of 11,000 points per timeseries. Try decreasing the query resolution (?step=XX)","messagePattern":"exceeded maximum resolution of 11,000 points per timeseries\\. Try decreasing the query resolution \\(\\?step=XX\\)","errorType":"validation","errorClass":"model.ApiError","httpStatus":400,"severity":"error","filePath":"pkg/query-service/app/parser.go","lineNumber":165,"sourceCode":"\tif end.Before(start) {\n\t\terr := errors.New(\"end timestamp must not be before start time\")\n\t\treturn nil, &model.ApiError{Typ: model.ErrorBadData, Err: err}\n\t}\n\n\tstep, err := parseMetricsDuration(r.FormValue(\"step\"))\n\tif err != nil {\n\t\treturn nil, &model.ApiError{Typ: model.ErrorBadData, Err: err}\n\t}\n\n\tif step <= 0 {\n\t\terr := errors.New(\"zero or negative query resolution step widths are not accepted. Try a positive integer\")\n\t\treturn nil, &model.ApiError{Typ: model.ErrorBadData, Err: err}\n\t}\n\n\t// For safety, limit the number of returned points per timeseries.\n\t// This is sufficient for 60s resolution for a week or 1h resolution for a year.\n\tif end.Sub(start)/step > 11000 {\n\t\terr := errors.New(\"exceeded maximum resolution of 11,000 points per timeseries. Try decreasing the query resolution (?step=XX)\")\n\t\treturn nil, &model.ApiError{Typ: model.ErrorBadData, Err: err}\n\t}\n\n\tqueryRangeParams := model.QueryRangeParams{\n\t\tStart: start,\n\t\tEnd:   end,\n\t\tStep:  step,\n\t\tQuery: r.FormValue(\"query\"),\n\t\tStats: r.FormValue(\"stats\"),\n\t}\n\n\treturn &queryRangeParams, nil\n}\n\nfunc parseGetUsageRequest(r *http.Request) (*model.GetUsageParams, error) {\n\tstartTime, err := parseTime(\"start\", r)\n\tif err != nil {\n\t\treturn nil, err","sourceCodeStart":147,"sourceCodeEnd":183,"githubUrl":"https://github.com/SigNoz/signoz/blob/5069bf80b08f1f00d7e014eccc09902f9871004f/pkg/query-service/app/parser.go#L147-L183","documentation":"SigNoz caps range queries at 11,000 points per timeseries (matching Prometheus safety limits) to prevent memory exhaustion. When (end-start)/step exceeds 11000 the request is rejected and you are told to increase step.","triggerScenarios":"Querying a long window with a fine step, e.g. 30 days at step=60s (43200 points) or a year at step=1h; auto-step formulas that use a fixed small step regardless of window size.","commonSituations":"Dashboards with long time ranges (30d/90d) and hardcoded step=15s; custom date-pickers allowing very wide ranges; scripts that iterate with tiny steps.","solutions":["Increase step so that (end-start)/step <= 11000 (e.g. for 30 days use step>=240s, commonly step=5m or step=1h)","Compute step dynamically from the window: step = max(minStep, window/10000)","Narrow the queried time range"],"exampleFix":"// before\nparams.Set(\"step\", \"15s\") // with a 30d range\n// after\nwindow := end.Sub(start)\nstep := window / 10000\nif step < 15*time.Second {\n    step = 15 * time.Second\n}\nparams.Set(\"step\", strconv.FormatInt(int64(step.Seconds()), 10))","handlingStrategy":"validation","validationCode":"window := end.Sub(start)\nstep := window / 10000\nif step < time.Second {\n    step = time.Second\n}\nif window/step > 11000 {\n    return fmt.Errorf(\"range too wide for step %v\", step)\n}","typeGuard":null,"tryCatchPattern":"if err != nil && strings.Contains(err.Error(), \"exceeded maximum resolution\") {\n    // auto-retry with a coarser step\n    step = window / 10000\n    resp, err = api.QueryRangeMetrics(ctx, start, end, step, query)\n}","preventionTips":["Always derive step from the selected time window","Cap dashboard time ranges when step is fixed","Watch Prometheus parity: same 11000-point limit applies"],"tags":["metrics","cardinality","query-limits","step"],"backgroundTag":"query-resolution-limit-exceeded","analyzedSha":"5069bf80b08f1f00d7e014eccc09902f9871004f","analyzedAt":"2026-08-28T06:22:12.824Z","schemaVersion":2},"datasetVersion":"2026-08-28T11:17:15.048Z"}