Skip to content

Commit 310ee6e

Browse files
BupycHukademidoff
andauthored
PMM-13602 Improve performance (#987)
* PMM-13602 Improve performance * PMM-13602 Improve performance for callstats * PMM-13602 enable indexDetails. * PMM-13602 fix linters. * PMM-13602 revert diagnostic data changes. * PMM-13602 fix linters. * Update .golangci.yml Co-authored-by: Alex Demidoff <alexander.demidoff@percona.com> --------- Co-authored-by: Alex Demidoff <alexander.demidoff@percona.com>
1 parent 112fabd commit 310ee6e

File tree

8 files changed

+559
-565
lines changed

8 files changed

+559
-565
lines changed

.golangci.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,9 @@ linters:
3232
- unused
3333
- testpackage
3434
- wsl
35-
- exhaustivestruct
35+
- exhaustruct
3636
- varnamelen
37+
- gochecknoglobals # we need globals for better performance, we use them for mapping, and we don't mutate them, so it's safe.
3738
- maligned #deprecated
3839
- scopelint #deprecated
3940
- golint #deprecated

exporter/collstats_collector.go

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,12 +37,12 @@ type collstatsCollector struct {
3737
}
3838

3939
// newCollectionStatsCollector creates a collector for statistics about collections.
40-
func newCollectionStatsCollector(ctx context.Context, client *mongo.Client, logger *logrus.Logger, compatible, discovery bool, topology labelsGetter, collections []string) *collstatsCollector {
40+
func newCollectionStatsCollector(ctx context.Context, client *mongo.Client, logger *logrus.Logger, discovery bool, topology labelsGetter, collections []string) *collstatsCollector {
4141
return &collstatsCollector{
4242
ctx: ctx,
4343
base: newBaseCollector(client, logger.WithFields(logrus.Fields{"collector": "collstats"})),
4444

45-
compatibleMode: compatible,
45+
compatibleMode: false, // there are no compatible metrics for this collector.
4646
discoveringMode: discovery,
4747
topologyInfo: topology,
4848

@@ -108,7 +108,9 @@ func (d *collstatsCollector) collect(ch chan<- prometheus.Metric) {
108108
},
109109
}
110110

111-
cursor, err := client.Database(database).Collection(collection).Aggregate(d.ctx, mongo.Pipeline{aggregation})
111+
pipeline := mongo.Pipeline{aggregation}
112+
113+
cursor, err := client.Database(database).Collection(collection).Aggregate(d.ctx, pipeline)
112114
if err != nil {
113115
logger.Errorf("cannot get $collstats cursor for collection %s.%s: %s", database, collection, err)
114116

exporter/collstats_collector_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ func TestCollStatsCollector(t *testing.T) {
5454

5555
collection := []string{"testdb.testcol_00", "testdb.testcol_01", "testdb.testcol_02"}
5656
logger := logrus.New()
57-
c := newCollectionStatsCollector(ctx, client, logger, false, false, ti, collection)
57+
c := newCollectionStatsCollector(ctx, client, logger, false, ti, collection)
5858

5959
// The last \n at the end of this string is important
6060
expected := strings.NewReader(`

exporter/exporter.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,7 @@ func (e *Exporter) makeRegistry(ctx context.Context, client *mongo.Client, topol
153153
e.getTotalCollectionsCount() <= e.opts.CollStatsLimit {
154154
limitsOk = true
155155
}
156+
limitsOk = true
156157

157158
if e.opts.CollectAll {
158159
if len(e.opts.CollStatsNamespaces) == 0 {
@@ -191,7 +192,7 @@ func (e *Exporter) makeRegistry(ctx context.Context, client *mongo.Client, topol
191192
// If we manually set the collection names we want or auto discovery is set.
192193
if (len(e.opts.CollStatsNamespaces) > 0 || e.opts.DiscoveringMode) && e.opts.EnableCollStats && limitsOk && requestOpts.EnableCollStats {
193194
cc := newCollectionStatsCollector(ctx, client, e.opts.Logger,
194-
e.opts.CompatibleMode, e.opts.DiscoveringMode,
195+
e.opts.DiscoveringMode,
195196
topologyInfo, e.opts.CollStatsNamespaces)
196197
registry.MustRegister(cc)
197198
}

exporter/metrics.go

Lines changed: 52 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -335,7 +335,7 @@ func makeMetrics(prefix string, m bson.M, labels map[string]string, compatibleMo
335335

336336
metrics := []*rawMetric{rm}
337337

338-
if renamedMetrics := metricRenameAndLabel(rm, specialConversions()); renamedMetrics != nil {
338+
if renamedMetrics := metricRenameAndLabel(rm, specialConversions); renamedMetrics != nil {
339339
metrics = renamedMetrics
340340
}
341341

@@ -435,62 +435,60 @@ func metricRenameAndLabel(rm *rawMetric, convs []conversion) []*rawMetric {
435435

436436
// specialConversions returns a list of special conversions we want to implement.
437437
// See: https://jira.percona.com/browse/PMM-6506
438-
func specialConversions() []conversion {
439-
return []conversion{
440-
{
441-
oldName: "mongodb_ss_opLatencies_ops",
442-
prefix: "mongodb_ss_opLatencies",
443-
suffixLabel: "op_type",
444-
suffixMapping: map[string]string{
445-
"commands_ops": "commands",
446-
"reads_ops": "reads",
447-
"transactions_ops": "transactions",
448-
"writes_ops": "writes",
449-
},
438+
var specialConversions = []conversion{ //nolint:gochecknoglobals
439+
{
440+
oldName: "mongodb_ss_opLatencies_ops",
441+
prefix: "mongodb_ss_opLatencies",
442+
suffixLabel: "op_type",
443+
suffixMapping: map[string]string{
444+
"commands_ops": "commands",
445+
"reads_ops": "reads",
446+
"transactions_ops": "transactions",
447+
"writes_ops": "writes",
450448
},
451-
{
452-
oldName: "mongodb_ss_opLatencies_latency",
453-
prefix: "mongodb_ss_opLatencies",
454-
suffixLabel: "op_type",
455-
suffixMapping: map[string]string{
456-
"commands_latency": "commands",
457-
"reads_latency": "reads",
458-
"transactions_latency": "transactions",
459-
"writes_latency": "writes",
460-
},
449+
},
450+
{
451+
oldName: "mongodb_ss_opLatencies_latency",
452+
prefix: "mongodb_ss_opLatencies",
453+
suffixLabel: "op_type",
454+
suffixMapping: map[string]string{
455+
"commands_latency": "commands",
456+
"reads_latency": "reads",
457+
"transactions_latency": "transactions",
458+
"writes_latency": "writes",
461459
},
462-
// mongodb_ss_wt_concurrentTransactions_read_out
463-
// mongodb_ss_wt_concurrentTransactions_write_out
464-
{
465-
oldName: "mongodb_ss_wt_concurrentTransactions_out",
466-
prefix: "mongodb_ss_wt_concurrentTransactions",
467-
suffixLabel: "txn_rw",
468-
suffixMapping: map[string]string{
469-
"read_out": "read",
470-
"write_out": "write",
471-
},
460+
},
461+
// mongodb_ss_wt_concurrentTransactions_read_out
462+
// mongodb_ss_wt_concurrentTransactions_write_out
463+
{
464+
oldName: "mongodb_ss_wt_concurrentTransactions_out",
465+
prefix: "mongodb_ss_wt_concurrentTransactions",
466+
suffixLabel: "txn_rw",
467+
suffixMapping: map[string]string{
468+
"read_out": "read",
469+
"write_out": "write",
472470
},
473-
// mongodb_ss_wt_concurrentTransactions_read_available
474-
// mongodb_ss_wt_concurrentTransactions_write_available
475-
{
476-
oldName: "mongodb_ss_wt_concurrentTransactions_available",
477-
prefix: "mongodb_ss_wt_concurrentTransactions",
478-
suffixLabel: "txn_rw",
479-
suffixMapping: map[string]string{
480-
"read_available": "read",
481-
"write_available": "write",
482-
},
471+
},
472+
// mongodb_ss_wt_concurrentTransactions_read_available
473+
// mongodb_ss_wt_concurrentTransactions_write_available
474+
{
475+
oldName: "mongodb_ss_wt_concurrentTransactions_available",
476+
prefix: "mongodb_ss_wt_concurrentTransactions",
477+
suffixLabel: "txn_rw",
478+
suffixMapping: map[string]string{
479+
"read_available": "read",
480+
"write_available": "write",
483481
},
484-
// mongodb_ss_wt_concurrentTransactions_read_totalTickets
485-
// mongodb_ss_wt_concurrentTransactions_write_totalTickets
486-
{
487-
oldName: "mongodb_ss_wt_concurrentTransactions_totalTickets",
488-
prefix: "mongodb_ss_wt_concurrentTransactions",
489-
suffixLabel: "txn_rw",
490-
suffixMapping: map[string]string{
491-
"read_totalTickets": "read",
492-
"write_totalTickets": "write",
493-
},
482+
},
483+
// mongodb_ss_wt_concurrentTransactions_read_totalTickets
484+
// mongodb_ss_wt_concurrentTransactions_write_totalTickets
485+
{
486+
oldName: "mongodb_ss_wt_concurrentTransactions_totalTickets",
487+
prefix: "mongodb_ss_wt_concurrentTransactions",
488+
suffixLabel: "txn_rw",
489+
suffixMapping: map[string]string{
490+
"read_totalTickets": "read",
491+
"write_totalTickets": "write",
494492
},
495-
}
493+
},
496494
}

exporter/metrics_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,7 @@ func TestRawToCompatibleRawMetric(t *testing.T) {
211211
}
212212

213213
for _, tc := range testCases {
214-
m := metricRenameAndLabel(tc.in, specialConversions())
214+
m := metricRenameAndLabel(tc.in, specialConversions)
215215
assert.Equal(t, m[0], tc.want)
216216
}
217217
}

exporter/top_collector.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ func newTopCollector(ctx context.Context, client *mongo.Client, logger *logrus.L
4242
return &topCollector{
4343
ctx: ctx,
4444
base: newBaseCollector(client, logger.WithFields(logrus.Fields{"collector": "top"})),
45-
compatibleMode: compatible,
45+
compatibleMode: false, // there are no compatible metrics for this collector.
4646
topologyInfo: topology,
4747
}
4848
}

0 commit comments

Comments
 (0)