What is this feature?
This PR implements a jitter mechanism for periodic alert state storage to distribute database load over time instead of processing all alert instances simultaneously. When enabled via the state_periodic_save_jitter_enabled configuration option, the system spreads batch write operations across 85% of the save interval window, preventing database load spikes in high-cardinality alerting environments.
Why do we need this feature?
In production environments with high alert cardinality, the current periodic batch storage can cause database performance issues by processing all alert instances simultaneously at fixed intervals. Even when using periodic batch storage to improve performance, concentrating all database operations at a single point in time can overwhelm database resources, especially in resource-constrained environments.
Rather than performing all INSERT operations at once during the periodic save, distributing these operations across the time window until the next save cycle can maintain more stable service operation within limited database resources. This approach prevents resource saturation by spreading the database load over the available time interval, allowing the system to operate more gracefully within existing resource constraints.
For example, with 200,000 alert instances using a 5-minute interval and 4,000 batch size, instead of executing 50 batch operations simultaneously, the jitter mechanism distributes these operations across approximately 4.25 minutes (85% of 5 minutes), with each batch executed roughly every 5.2 seconds.
This PR provides system-level protection against such load spikes by distributing operations across time, reducing peak resource usage while maintaining the benefits of periodic batch storage. The jitter mechanism is particularly valuable in resource-constrained environments where maintaining consistent database performance is more critical than precise timing of state updates.
* Rename this heading to match the link in 'Request Initiation'
* Fix link to 'Configure SAML using the Grafana configuration file' and make the link text match
* datasource(postgresql): add support of pgpass file
* remove `required` label for password field
* set `runPostgresTests` back to false
* fix after merge conflict
* add pgx_test
* set `runPostgresTests` back to `false`
* Add `no password` test case to the `pgx_test.go` as well
* fix `postgres_pgx_test.go`
* Update datasource docs
* docs wording
* docs: `datasource` -> `data source`
* Update docs/sources/datasources/postgres/configure/_index.md
Co-authored-by: Zoltán Bedi <zoltan.bedi@gmail.com>
* run prettier - docs
---------
Co-authored-by: Zoltán Bedi <zoltan.bedi@gmail.com>
* alerting docs: update list view filtering description
update the description of the list view filter on the view alert rules page.
* img
* Update view-alert-rules.md
* Update view-alert-rules.md
* edit via lauren
* migrate search queries to the backend
* set duration unit to ms
* remove error log for debugging
* support nested frames and improve url handling
* formatting in search.go
* space
* run make update-workspace
* remove un-necessary fmt.Sprintf
* add support for span table format
* update fn names and re-order
* support raw format
* revert go.mod and go.sum
* remove frontend logic
* remove any types from typescript
* fix golint
* add tests
* fix golangci-lint
* refactor and implement suggestions
* fix tests
* update data frame type
* remove console log
* fix
* use fallthough to traceql type
* use tempo backend for traceql queries
* update tests
* fix golangci-lint
* Correct types for Fields, allow nulls
* add feature toggle definition
* put backend logic behind feature toggle
* Change toggle default to false
* Remove console.log. Fix crash from missing table type
* fix tests
* fix backend tests
---------
Co-authored-by: Andre Pereira <adrapereira@gmail.com>
* added supported functions and alerting/recording rules
* added more to alerting and recording
* added LLM integration info, cleaned up some other language
* cleaned up some passive voice
* ran prettier
* added requested update to alert/recording rules
* added RefID definition
* Update docs/sources/panels-visualizations/query-transform-data/sql-expressions/index.md
Co-authored-by: Alex Spencer <52186778+alexjonspencer1@users.noreply.github.com>
* updates based on feedback
* updates based on feedback
* ran prettier
---------
Co-authored-by: Alex Spencer <52186778+alexjonspencer1@users.noreply.github.com>
* Table: Update UX for single-reducer use case in new footer
* all cases are working; unit tests pass
* style and code cleanup in SummaryCell
* remove e2e test for sum reducer label
* reorganize code, todo tests
* slight style cleanup
* one more little reorganization
* updates based on CI failures
* update tests and docs
* unused prop
* update table footer image
* alt text, lint issue
* update gdev to create footer dashboard and re-point e2es there, add a few new cases
* remove console.log
* Table: Footer support for multiple reducers
* fix migrator test output due to required default value
* fix go migration test
* more go test fixes
* fix go tests for footer
* Merge #110062
* update migration dashboard
* Small docs fixes
* Small docs fix
* remove migration method in Go, update js unit test
* add migration dashboard for footer and clean up some issues with countAll
* Footer should always use og rows for calcs
* update footer to be unaffected by filtering and sorting
* more e2es
* add more complex footer to kitchen sink, migrate panel all the way up
* update codeowners for e2e
* relocate footer migration panels and e2es to main 12.2 migration dashboard
* go further with the migration; kill unused fields, rename reducer to reducers
* get the go code up to date, move enablePagination to its own option as well
* add a unit to one of the numeric columns with a footer in kitchen sink
* fix reducers override in kitchen sink migration table
---------
Co-authored-by: Paul Marbach <paul.marbach@grafana.com>
Co-authored-by: Isabel Matwawana <isabel.matwawana@grafana.com>
Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>
Co-authored-by: Leon Sorokin <leeoniya@gmail.com>