diff --git a/conf/defaults.ini b/conf/defaults.ini
index 695aace59fe..dc1d72d96f3 100644
--- a/conf/defaults.ini
+++ b/conf/defaults.ini
@@ -682,6 +682,9 @@ max_annotation_age =
max_annotations_to_keep =
#################################### Annotations #########################
+[annotations]
+# Configures the batch size for the annotation clean-up job. This setting is used for dashboard, API, and alert annotations.
+cleanupjob_batchsize = 100
[annotations.dashboard]
# Dashboard annotations means that annotations are associated with the dashboard they are created on.
diff --git a/conf/sample.ini b/conf/sample.ini
index 28db4c24b84..15a543b482d 100644
--- a/conf/sample.ini
+++ b/conf/sample.ini
@@ -675,6 +675,9 @@
;max_annotations_to_keep =
#################################### Annotations #########################
+[annotations]
+# Configures the batch size for the annotation clean-up job. This setting is used for dashboard, API, and alert annotations.
+;cleanupjob_batchsize = 100
[annotations.dashboard]
# Dashboard annotations means that annotations are associated with the dashboard they are created on.
diff --git a/docs/sources/administration/configuration.md b/docs/sources/administration/configuration.md
index 9baf89ce4b9..2559a01dfca 100644
--- a/docs/sources/administration/configuration.md
+++ b/docs/sources/administration/configuration.md
@@ -1082,6 +1082,12 @@ Configures max number of alert annotations that Grafana stores. Default value is
+## [annotations]
+
+### cleanupjob_batchsize
+
+Configures the batch size for the annotation clean-up job. This setting is used for dashboard, API, and alert annotations.
+
## [annotations.dashboard]
Dashboard annotations means that annotations are associated with the dashboard they are created on.
diff --git a/pkg/services/sqlstore/sqlstore.go b/pkg/services/sqlstore/sqlstore.go
index 6331be78a8d..c8ac9b2294d 100644
--- a/pkg/services/sqlstore/sqlstore.go
+++ b/pkg/services/sqlstore/sqlstore.go
@@ -105,7 +105,7 @@ func (ss *SQLStore) Init() error {
// Init repo instances
annotations.SetRepository(&SQLAnnotationRepo{})
- annotations.SetAnnotationCleaner(&AnnotationCleanupService{batchSize: 100, log: log.New("annotationcleaner")})
+ annotations.SetAnnotationCleaner(&AnnotationCleanupService{batchSize: ss.Cfg.AnnotationCleanupJobBatchSize, log: log.New("annotationcleaner")})
ss.Bus.SetTransactionManager(ss)
// Register handlers
diff --git a/pkg/setting/setting.go b/pkg/setting/setting.go
index 41eb78a6f4d..57e2e7784c2 100644
--- a/pkg/setting/setting.go
+++ b/pkg/setting/setting.go
@@ -317,6 +317,7 @@ type Cfg struct {
HiddenUsers map[string]struct{}
// Annotations
+ AnnotationCleanupJobBatchSize int64
AlertingAnnotationCleanupSetting AnnotationCleanupSettings
DashboardAnnotationCleanupSettings AnnotationCleanupSettings
APIAnnotationCleanupSettings AnnotationCleanupSettings
@@ -473,6 +474,9 @@ func (cfg *Cfg) readGrafanaEnvironmentMetrics() error {
}
func (cfg *Cfg) readAnnotationSettings() {
+ section := cfg.Raw.Section("annotations")
+ cfg.AnnotationCleanupJobBatchSize = section.Key("cleanupjob_batchsize").MustInt64(100)
+
dashboardAnnotation := cfg.Raw.Section("annotations.dashboard")
apiIAnnotation := cfg.Raw.Section("annotations.api")
alertingSection := cfg.Raw.Section("alerting")