Skip to content

Commit d59cfef

Browse files
committed
fix: cap pg_stat_statements to top 100 queries, increase VM concurrency
100K distinct queryids were creating a cardinality explosion in VictoriaMetrics, causing 429 (Too Many Requests) on all dashboard queries. The WHERE filter alone (calls >= 5 OR exec_time >= 1000ms) was insufficient. Changes: - Add ORDER BY exec_time_total DESC LIMIT 100 to both v11 and v17 pg_stat_statements SQL queries — only the top 100 queries by execution time are exported to Prometheus - Increase search.maxConcurrentRequests from 4 to 16 in both docker-compose.yml and Helm values to prevent 429s when Grafana dashboards issue many parallel queries https://claude.ai/code/session_01SzJxzZNQjDQphaHyaX3RU7
1 parent 42211c9 commit d59cfef

3 files changed

Lines changed: 9 additions & 3 deletions

File tree

config/pgwatch-prometheus/metrics.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1036,6 +1036,8 @@ metrics:
10361036
temp_bytes_written::int8 as temp_bytes_written
10371037
from aggregated_statements
10381038
where calls >= 5 or exec_time_total >= 1000
1039+
order by exec_time_total desc
1040+
limit 100
10391041
17: |
10401042
with aggregated_statements as ( /* pgwatch_generated */
10411043
select
@@ -1083,6 +1085,8 @@ metrics:
10831085
temp_bytes_written::int8 as temp_bytes_written
10841086
from aggregated_statements
10851087
where calls >= 5 or exec_time_total >= 1000
1088+
order by exec_time_total desc
1089+
limit 100
10861090
gauges:
10871091
- calls
10881092
- plans_total

docker-compose.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
# CPU overcommitment is intentional - containers rarely hit limits simultaneously.
44
#
55
# pgwatch-prometheus collects metrics including pg_stat_statements
6-
# (filtered: calls >= 5 OR exec_time >= 1000ms to control cardinality).
6+
# (top 100 queries by exec_time, filtered: calls >= 5 OR exec_time >= 1000ms).
77

88
services:
99
# Config Initializer - Copies static configs from image to volume
@@ -103,7 +103,7 @@ services:
103103
- "-promscrape.config.strictParse=false"
104104
- "-promscrape.maxScrapeSize=128000000"
105105
- "-search.maxQueryDuration=30s"
106-
- "-search.maxConcurrentRequests=4"
106+
- "-search.maxConcurrentRequests=16"
107107
depends_on:
108108
config-init:
109109
condition: service_completed_successfully

postgres_ai_helm/values.yaml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,9 @@ victoriaMetrics:
4444
image: victoriametrics/victoria-metrics:v1.105.0
4545
retentionPeriod: 336h
4646
scrapeInterval: 15s
47-
extraArgs: []
47+
extraArgs:
48+
- -search.maxQueryDuration=30s
49+
- -search.maxConcurrentRequests=16
4850
service:
4951
type: ClusterIP
5052
port: 8428

0 commit comments

Comments
 (0)