Skip to content

Commit 53cdc3d

Browse files
committed
sqlstats: add FingerprintID to sqlstats.RecordedTxnStats
This commit adds the `FingerprintID` field to sqlstats.RecordedTxnStats. Epic: none Part of: #141024 Release note: None
1 parent f90c961 commit 53cdc3d

File tree

7 files changed

+34
-29
lines changed

7 files changed

+34
-29
lines changed

pkg/sql/conn_executor_exec.go

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4330,6 +4330,7 @@ func (ex *connExecutor) recordTransactionFinish(
43304330
commitLat := ex.phaseTimes.GetCommitLatency()
43314331

43324332
recordedTxnStats := sqlstats.RecordedTxnStats{
4333+
FingerprintID: transactionFingerprintID,
43334334
SessionID: ex.planner.extendedEvalCtx.SessionID,
43344335
TransactionID: ev.txnID,
43354336
TransactionTimeSec: elapsedTime.Seconds(),
@@ -4376,11 +4377,7 @@ func (ex *connExecutor) recordTransactionFinish(
43764377
)
43774378
}
43784379

4379-
return ex.statsCollector.RecordTransaction(
4380-
ctx,
4381-
transactionFingerprintID,
4382-
recordedTxnStats,
4383-
)
4380+
return ex.statsCollector.RecordTransaction(ctx, recordedTxnStats)
43844381
}
43854382

43864383
// Records a SERIALIZATION_CONFLICT contention event to the contention registry event

pkg/sql/sqlstats/persistedsqlstats/bench_test.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -412,8 +412,10 @@ func BenchmarkSqlStatsMaxFlushTime(b *testing.B) {
412412
}
413413

414414
for i := int64(1); i <= txnFingerprintLimit; i++ {
415-
mockTxnValue := sqlstats.RecordedTxnStats{}
416-
err := appContainer.RecordTransaction(ctx, appstatspb.TransactionFingerprintID(i), mockTxnValue)
415+
mockTxnValue := sqlstats.RecordedTxnStats{
416+
FingerprintID: appstatspb.TransactionFingerprintID(i),
417+
}
418+
err := appContainer.RecordTransaction(ctx, mockTxnValue)
417419
if errors.Is(err, ssmemstorage.ErrFingerprintLimitReached) {
418420
break
419421
}

pkg/sql/sqlstats/sslocal/sql_stats_test.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -475,7 +475,8 @@ func TestExplicitTxnFingerprintAccounting(t *testing.T) {
475475
statsCollector.EndTransaction(ctx, txnFingerprintID)
476476
require.NoError(t,
477477
statsCollector.
478-
RecordTransaction(ctx, txnFingerprintID, sqlstats.RecordedTxnStats{
478+
RecordTransaction(ctx, sqlstats.RecordedTxnStats{
479+
FingerprintID: txnFingerprintID,
479480
SessionData: &sessiondata.SessionData{
480481
SessionData: sessiondatapb.SessionData{
481482
UserProto: username.RootUserName().EncodeProto(),
@@ -607,7 +608,8 @@ func TestAssociatingStmtStatsWithTxnFingerprint(t *testing.T) {
607608

608609
transactionFingerprintID := appstatspb.TransactionFingerprintID(txnFingerprintIDHash.Sum())
609610
statsCollector.EndTransaction(ctx, transactionFingerprintID)
610-
err := statsCollector.RecordTransaction(ctx, transactionFingerprintID, sqlstats.RecordedTxnStats{
611+
err := statsCollector.RecordTransaction(ctx, sqlstats.RecordedTxnStats{
612+
FingerprintID: transactionFingerprintID,
611613
SessionData: &sessiondata.SessionData{
612614
SessionData: sessiondatapb.SessionData{
613615
UserProto: username.RootUserName().EncodeProto(),

pkg/sql/sqlstats/sslocal/sslocal_stats_collector.go

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -284,9 +284,7 @@ func (s *StatsCollector) observeStatement(value sqlstats.RecordedStmtStats) {
284284

285285
// observeTransaction sends the recorded transaction stats to the insights system
286286
// for further processing.
287-
func (s *StatsCollector) observeTransaction(
288-
txnFingerprintID appstatspb.TransactionFingerprintID, value sqlstats.RecordedTxnStats,
289-
) {
287+
func (s *StatsCollector) observeTransaction(value sqlstats.RecordedTxnStats) {
290288
if !s.sendInsights {
291289
return
292290
}
@@ -315,7 +313,7 @@ func (s *StatsCollector) observeTransaction(
315313

316314
insight := insights.Transaction{
317315
ID: value.TransactionID,
318-
FingerprintID: txnFingerprintID,
316+
FingerprintID: value.FingerprintID,
319317
UserPriority: value.Priority.String(),
320318
ImplicitTxn: value.ImplicitTxn,
321319
Contention: &value.ExecStats.ContentionTime,
@@ -359,9 +357,9 @@ func (s *StatsCollector) RecordStatement(
359357
// RecordTransaction records the statistics of a transaction.
360358
// Transaction stats are always recorded directly on the flushTarget.
361359
func (s *StatsCollector) RecordTransaction(
362-
ctx context.Context, key appstatspb.TransactionFingerprintID, value sqlstats.RecordedTxnStats,
360+
ctx context.Context, value sqlstats.RecordedTxnStats,
363361
) error {
364-
s.observeTransaction(key, value)
362+
s.observeTransaction(value)
365363

366364
// TODO(117690): Unify StmtStatsEnable and TxnStatsEnable into a single cluster setting.
367365
if !sqlstats.TxnStatsEnable.Get(&s.st.SV) {
@@ -374,7 +372,7 @@ func (s *StatsCollector) RecordTransaction(
374372
if t > 0 {
375373
return nil
376374
}
377-
return s.flushTarget.RecordTransaction(ctx, key, value)
375+
return s.flushTarget.RecordTransaction(ctx, value)
378376
}
379377

380378
func (s *StatsCollector) IterateStatementStats(

pkg/sql/sqlstats/ssmemstorage/ss_mem_writer.go

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -182,13 +182,11 @@ func (s *Container) TrySetStatementSampled(
182182
}
183183

184184
// RecordTransaction saves per-transaction statistics.
185-
func (s *Container) RecordTransaction(
186-
ctx context.Context, key appstatspb.TransactionFingerprintID, value sqlstats.RecordedTxnStats,
187-
) error {
185+
func (s *Container) RecordTransaction(ctx context.Context, value sqlstats.RecordedTxnStats) error {
188186
s.recordTransactionHighLevelStats(value.TransactionTimeSec, value.Committed, value.ImplicitTxn)
189187

190188
// Get the statistics object.
191-
stats, created, throttled := s.tryCreateStatsForTxnWithKey(key, value.StatementFingerprintIDs)
189+
stats, created, throttled := s.tryCreateStatsForTxnWithKey(value.FingerprintID, value.StatementFingerprintIDs)
192190

193191
if throttled {
194192
return ErrFingerprintLimitReached
@@ -205,14 +203,14 @@ func (s *Container) RecordTransaction(
205203
// fingerprints for this app. We also abort the operation and return an error.
206204
if created {
207205
estimatedMemAllocBytes :=
208-
stats.sizeUnsafeLocked() + key.Size() + 8 /* hash of transaction key */
206+
stats.sizeUnsafeLocked() + value.FingerprintID.Size() + 8 /* hash of transaction key */
209207
if err := func() error {
210208
// If the monitor is nil, we do not track memory usage.
211209
if s.acc != nil {
212210
if err := s.acc.Grow(ctx, estimatedMemAllocBytes); err != nil {
213211
s.mu.Lock()
214212
defer s.mu.Unlock()
215-
delete(s.mu.txns, key)
213+
delete(s.mu.txns, value.FingerprintID)
216214
return ErrMemoryPressure
217215
}
218216
}

pkg/sql/sqlstats/ssmemstorage/ss_mem_writer_test.go

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,9 @@ func TestRecordTransaction(t *testing.T) {
6565
nil,
6666
)
6767
// Record a transaction, ensure no insights are generated.
68-
require.NoError(t, memContainer.RecordTransaction(ctx, appstatspb.TransactionFingerprintID(123), sqlstats.RecordedTxnStats{}))
68+
require.NoError(t, memContainer.RecordTransaction(ctx, sqlstats.RecordedTxnStats{
69+
FingerprintID: appstatspb.TransactionFingerprintID(123),
70+
}))
6971
})
7072
}
7173

@@ -122,6 +124,7 @@ func TestContainer_Add(t *testing.T) {
122124
// Add some transaction stats to the source container
123125
txnFingerprintID := appstatspb.TransactionFingerprintID(123)
124126
txnStats := sqlstats.RecordedTxnStats{
127+
FingerprintID: txnFingerprintID,
125128
RowsAffected: 10,
126129
ServiceLatency: 1,
127130
RetryLatency: 2,
@@ -132,7 +135,7 @@ func TestContainer_Add(t *testing.T) {
132135
RowsWritten: 5,
133136
BytesRead: 100,
134137
}
135-
require.NoError(t, src.RecordTransaction(ctx, txnFingerprintID, txnStats))
138+
require.NoError(t, src.RecordTransaction(ctx, txnStats))
136139

137140
// In the src destination, these 'reduced' entries will have
138141
// 0 values.
@@ -159,6 +162,7 @@ func TestContainer_Add(t *testing.T) {
159162
}
160163
reducedTxnFingerprintID := appstatspb.TransactionFingerprintID(321)
161164
reducedTxnStats := sqlstats.RecordedTxnStats{
165+
FingerprintID: reducedTxnFingerprintID,
162166
RowsAffected: 100,
163167
ServiceLatency: 500 * time.Millisecond,
164168
RetryLatency: 100 * time.Millisecond,
@@ -170,11 +174,13 @@ func TestContainer_Add(t *testing.T) {
170174
BytesRead: 100,
171175
}
172176
require.NoError(t, dest.RecordStatement(ctx, reducedStmtStats))
173-
require.NoError(t, dest.RecordTransaction(ctx, reducedTxnFingerprintID, reducedTxnStats))
177+
require.NoError(t, dest.RecordTransaction(ctx, reducedTxnStats))
174178
require.NoError(t, src.RecordStatement(ctx, sqlstats.RecordedStmtStats{
175179
FingerprintID: appstatspb.StmtFingerprintID(321),
176180
}))
177-
require.NoError(t, src.RecordTransaction(ctx, reducedTxnFingerprintID, sqlstats.RecordedTxnStats{}))
181+
require.NoError(t, src.RecordTransaction(ctx, sqlstats.RecordedTxnStats{
182+
FingerprintID: reducedTxnFingerprintID,
183+
}))
178184

179185
for i := 0; i < 10; i++ {
180186
require.NoError(t, dest.Add(ctx, src))
@@ -316,10 +322,11 @@ func TestContainerMemoryAccountClearing(t *testing.T) {
316322
require.NoError(t, err)
317323

318324
// Record a transaction to allocate more memory.
319-
txnKey := appstatspb.TransactionFingerprintID(100)
320-
txnStats := sqlstats.RecordedTxnStats{}
325+
txnStats := sqlstats.RecordedTxnStats{
326+
FingerprintID: appstatspb.TransactionFingerprintID(100),
327+
}
321328

322-
err = container.RecordTransaction(ctx, txnKey, txnStats)
329+
err = container.RecordTransaction(ctx, txnStats)
323330
require.NoError(t, err)
324331

325332
// Verify memory is allocated

pkg/sql/sqlstats/ssprovider.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@ type RecordedStmtStats struct {
9797

9898
// RecordedTxnStats stores the statistics of a transaction to be recorded.
9999
type RecordedTxnStats struct {
100+
FingerprintID appstatspb.TransactionFingerprintID
100101
SessionID clusterunique.ID
101102
TransactionID uuid.UUID
102103
TransactionTimeSec float64

0 commit comments

Comments
 (0)