Skip to content

Commit 81fecc6

Browse files
committed
feat(dbi): Enable PostgreSQL execution plan collection
The PostgreSQL receiver can collect query execution plans and attach them to top query events as postgresql.query_plan, but the agent pinned max_explain_each_interval to 0, which disabled collection entirely and left the attribute as an empty string. Set it to the receiver default of 1000. The effective ceiling is top_n_query (200) plan-only operations per collection interval, since only that many queries are considered; cached plans do not consume budget, and the plan cache has a one hour TTL. EXPLAIN is issued without ANALYZE, so no query is executed.
1 parent 706474e commit 81fecc6

5 files changed

Lines changed: 24 additions & 7 deletions

File tree

translator/tocwconfig/sampleConfig/opentelemetry/combined_v1_v2_ec2_config.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1292,7 +1292,7 @@ receivers:
12921292
insecure_skip_verify: true
12931293
top_query_collection:
12941294
collection_interval: 1m0s
1295-
max_explain_each_interval: 0
1295+
max_explain_each_interval: 1000
12961296
max_rows_per_query: 5000
12971297
query_plan_cache_size: 1000
12981298
query_plan_cache_ttl: 1h0m0s
@@ -1405,7 +1405,7 @@ receivers:
14051405
insecure_skip_verify: true
14061406
top_query_collection:
14071407
collection_interval: 1m0s
1408-
max_explain_each_interval: 0
1408+
max_explain_each_interval: 1000
14091409
max_rows_per_query: 5000
14101410
query_plan_cache_size: 1000
14111411
query_plan_cache_ttl: 1h0m0s

translator/tocwconfig/sampleConfig/opentelemetry/combined_v1_v2_eks_config.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1863,7 +1863,7 @@ receivers:
18631863
insecure_skip_verify: true
18641864
top_query_collection:
18651865
collection_interval: 1m0s
1866-
max_explain_each_interval: 0
1866+
max_explain_each_interval: 1000
18671867
max_rows_per_query: 5000
18681868
query_plan_cache_size: 1000
18691869
query_plan_cache_ttl: 1h0m0s
@@ -1976,7 +1976,7 @@ receivers:
19761976
insecure_skip_verify: true
19771977
top_query_collection:
19781978
collection_interval: 1m0s
1979-
max_explain_each_interval: 0
1979+
max_explain_each_interval: 1000
19801980
max_rows_per_query: 5000
19811981
query_plan_cache_size: 1000
19821982
query_plan_cache_ttl: 1h0m0s

translator/tocwconfig/sampleConfig/opentelemetry/dbi_config_linux.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -979,7 +979,7 @@ receivers:
979979
insecure_skip_verify: true
980980
top_query_collection:
981981
collection_interval: 1m0s
982-
max_explain_each_interval: 0
982+
max_explain_each_interval: 1000
983983
max_rows_per_query: 5000
984984
query_plan_cache_size: 1000
985985
query_plan_cache_ttl: 1h0m0s
@@ -1092,7 +1092,7 @@ receivers:
10921092
insecure_skip_verify: true
10931093
top_query_collection:
10941094
collection_interval: 1m0s
1095-
max_explain_each_interval: 0
1095+
max_explain_each_interval: 1000
10961096
max_rows_per_query: 5000
10971097
query_plan_cache_size: 1000
10981098
query_plan_cache_ttl: 1h0m0s

translator/translate/otel/receiver/postgresql/translator.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ func (t *translator) Translate(_ *confmap.Conf) (component.Config, error) {
9090
cfg.TopQueryCollection.CollectionInterval = 60 * time.Second
9191
cfg.TopNQuery = 200
9292
cfg.TopQueryCollection.MaxRowsPerQuery = 5000
93-
cfg.MaxExplainEachInterval = 0
93+
cfg.MaxExplainEachInterval = 1000
9494

9595
return cfg, nil
9696
}

translator/translate/otel/receiver/postgresql/translator_test.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,23 @@ func TestTranslator_Translate_Defaults(t *testing.T) {
4141
assert.Equal(t, int64(500), pgCfg.QuerySampleCollection.MaxRowsPerQuery)
4242
assert.Equal(t, int64(200), pgCfg.TopNQuery)
4343
assert.Equal(t, int64(5000), pgCfg.TopQueryCollection.MaxRowsPerQuery)
44+
assert.Equal(t, int64(1000), pgCfg.MaxExplainEachInterval)
45+
}
46+
47+
// Explain plan collection is disabled entirely when the budget is zero, so guard
48+
// against it silently regressing to that state.
49+
func TestTranslator_Translate_ExplainPlansEnabled(t *testing.T) {
50+
tr := NewTranslator(
51+
WithEndpoint("localhost:5432"),
52+
WithUsername("cw_monitor"),
53+
WithPassfile("/etc/.pgpass"),
54+
WithIsLocalhost(true),
55+
)
56+
cfg, err := tr.Translate(nil)
57+
require.NoError(t, err)
58+
pgCfg := cfg.(*postgresqlreceiver.Config)
59+
60+
assert.Positive(t, pgCfg.MaxExplainEachInterval)
4461
}
4562

4663
func TestTranslator_Translate_Events(t *testing.T) {

0 commit comments

Comments
 (0)