Skip to content

Commit 834fd16

Browse files
authored
planner: add more metrics for binding (#51739)
ref #51347
1 parent 47a990e commit 834fd16

File tree

8 files changed

+372
-25
lines changed

8 files changed

+372
-25
lines changed

pkg/bindinfo/BUILD.bazel

-2
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,6 @@ go_test(
7171
"//pkg/bindinfo/norm",
7272
"//pkg/config",
7373
"//pkg/domain",
74-
"//pkg/metrics",
7574
"//pkg/parser",
7675
"//pkg/parser/ast",
7776
"//pkg/parser/auth",
@@ -90,7 +89,6 @@ go_test(
9089
"//pkg/util/stmtsummary",
9190
"@com_github_ngaut_pools//:pools",
9291
"@com_github_pingcap_failpoint//:failpoint",
93-
"@com_github_prometheus_client_model//go",
9492
"@com_github_stretchr_testify//require",
9593
"@io_opencensus_go//stats/view",
9694
"@org_uber_go_goleak//:goleak",

pkg/bindinfo/binding_cache.go

+11
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import (
2222

2323
"github.com/pingcap/tidb/pkg/bindinfo/internal/logutil"
2424
"github.com/pingcap/tidb/pkg/bindinfo/norm"
25+
"github.com/pingcap/tidb/pkg/metrics"
2526
"github.com/pingcap/tidb/pkg/parser"
2627
"github.com/pingcap/tidb/pkg/parser/ast"
2728
"github.com/pingcap/tidb/pkg/sessionctx"
@@ -84,11 +85,21 @@ func newFuzzyBindingCache(loadBindingFromStorageFunc func(sessionctx.Context, st
8485
}
8586
}
8687

88+
func (fbc *fuzzyBindingCache) shouldMetric() bool {
89+
return fbc.loadBindingFromStorageFunc != nil // only metric for GlobalBindingCache, whose loadBindingFromStorageFunc is not nil.
90+
}
91+
8792
func (fbc *fuzzyBindingCache) FuzzyMatchingBinding(sctx sessionctx.Context, fuzzyDigest string, tableNames []*ast.TableName) (matchedBinding Binding, isMatched bool) {
8893
matchedBinding, isMatched, missingSQLDigest := fbc.getFromMemory(sctx, fuzzyDigest, tableNames)
8994
if len(missingSQLDigest) == 0 {
95+
if fbc.shouldMetric() && isMatched {
96+
metrics.BindingCacheHitCounter.Inc()
97+
}
9098
return
9199
}
100+
if fbc.shouldMetric() {
101+
metrics.BindingCacheMissCounter.Inc()
102+
}
92103
if fbc.loadBindingFromStorageFunc == nil {
93104
return
94105
}

pkg/bindinfo/global_handle.go

+5
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import (
2525
"github.com/pingcap/errors"
2626
"github.com/pingcap/failpoint"
2727
"github.com/pingcap/tidb/pkg/bindinfo/internal/logutil"
28+
"github.com/pingcap/tidb/pkg/metrics"
2829
"github.com/pingcap/tidb/pkg/parser"
2930
"github.com/pingcap/tidb/pkg/parser/ast"
3031
"github.com/pingcap/tidb/pkg/parser/format"
@@ -210,6 +211,10 @@ func (h *globalBindingHandle) LoadFromStorageToCache(fullLoad bool) (err error)
210211
defer func() {
211212
h.setLastUpdateTime(lastUpdateTime)
212213
h.setCache(newCache)
214+
215+
metrics.BindingCacheMemUsage.Set(float64(h.GetMemUsage()))
216+
metrics.BindingCacheMemLimit.Set(float64(h.GetMemCapacity()))
217+
metrics.BindingCacheNumBindings.Set(float64(h.Size()))
213218
}()
214219

215220
for _, row := range rows {

pkg/bindinfo/session_handle_test.go

-10
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,11 @@ import (
2323
"github.com/pingcap/tidb/pkg/bindinfo"
2424
"github.com/pingcap/tidb/pkg/bindinfo/internal"
2525
"github.com/pingcap/tidb/pkg/bindinfo/norm"
26-
"github.com/pingcap/tidb/pkg/metrics"
2726
"github.com/pingcap/tidb/pkg/parser"
2827
"github.com/pingcap/tidb/pkg/parser/auth"
2928
"github.com/pingcap/tidb/pkg/server"
3029
"github.com/pingcap/tidb/pkg/testkit"
3130
"github.com/pingcap/tidb/pkg/util/stmtsummary"
32-
dto "github.com/prometheus/client_model/go"
3331
"github.com/stretchr/testify/require"
3432
)
3533

@@ -48,14 +46,6 @@ func TestGlobalAndSessionBindingBothExist(t *testing.T) {
4846

4947
tk.MustExec("create global binding for SELECT * from t1,t2 where t1.id = t2.id using SELECT /*+ TIDB_SMJ(t1, t2) */ * from t1,t2 where t1.id = t2.id")
5048

51-
// Test bindingUsage, which indicates how many times the binding is used.
52-
metrics.BindUsageCounter.Reset()
53-
tk.MustHavePlan("SELECT * from t1,t2 where t1.id = t2.id", "MergeJoin")
54-
pb := &dto.Metric{}
55-
err := metrics.BindUsageCounter.WithLabelValues(metrics.ScopeGlobal).Write(pb)
56-
require.NoError(t, err)
57-
require.Equal(t, float64(1), pb.GetCounter().GetValue())
58-
5949
// Test 'tidb_use_plan_baselines'
6050
tk.MustExec("set @@tidb_use_plan_baselines = 0")
6151
tk.MustHavePlan("SELECT * from t1,t2 where t1.id = t2.id", "HashJoin")

pkg/metrics/bindinfo.go

+38-6
Original file line numberDiff line numberDiff line change
@@ -18,16 +18,48 @@ import "github.com/prometheus/client_golang/prometheus"
1818

1919
// bindinfo metrics.
2020
var (
21-
BindUsageCounter *prometheus.CounterVec
21+
BindingCacheHitCounter prometheus.Counter
22+
BindingCacheMissCounter prometheus.Counter
23+
BindingCacheMemUsage prometheus.Gauge
24+
BindingCacheMemLimit prometheus.Gauge
25+
BindingCacheNumBindings prometheus.Gauge
2226
)
2327

2428
// InitBindInfoMetrics initializes bindinfo metrics.
2529
func InitBindInfoMetrics() {
26-
BindUsageCounter = NewCounterVec(
30+
BindingCacheHitCounter = NewCounter(
2731
prometheus.CounterOpts{
2832
Namespace: "tidb",
29-
Subsystem: "bindinfo",
30-
Name: "bind_usage_counter",
31-
Help: "Counter of query using sql bind",
32-
}, []string{LabelScope})
33+
Subsystem: "server",
34+
Name: "binding_cache_hit_total",
35+
Help: "Counter of binding cache hit.",
36+
})
37+
BindingCacheMissCounter = NewCounter(
38+
prometheus.CounterOpts{
39+
Namespace: "tidb",
40+
Subsystem: "server",
41+
Name: "binding_cache_miss_total",
42+
Help: "Counter of binding cache miss.",
43+
})
44+
BindingCacheMemUsage = NewGauge(
45+
prometheus.GaugeOpts{
46+
Namespace: "tidb",
47+
Subsystem: "server",
48+
Name: "binding_cache_mem_usage",
49+
Help: "Memory usage of binding cache.",
50+
})
51+
BindingCacheMemLimit = NewGauge(
52+
prometheus.GaugeOpts{
53+
Namespace: "tidb",
54+
Subsystem: "server",
55+
Name: "binding_cache_mem_limit",
56+
Help: "Memory limit of binding cache.",
57+
})
58+
BindingCacheNumBindings = NewGauge(
59+
prometheus.GaugeOpts{
60+
Namespace: "tidb",
61+
Subsystem: "server",
62+
Name: "binding_cache_num_bindings",
63+
Help: "Number of bindings in binding cache.",
64+
})
3365
}

0 commit comments

Comments
 (0)