Skip to content

Commit aa88fb3

Browse files
committed
save duplicated read
Signed-off-by: ekexium <[email protected]>
1 parent 180b6df commit aa88fb3

File tree

1 file changed

+12
-10
lines changed

1 file changed

+12
-10
lines changed

pkg/util/stmtsummary/statement_summary.go

+12-10
Original file line numberDiff line numberDiff line change
@@ -559,14 +559,16 @@ func (ssbd *stmtSummaryByDigest) init(sei *StmtExecInfo, _ int64, _ int64, _ int
559559

560560
func (ssbd *stmtSummaryByDigest) add(sei *StmtExecInfo, beginTime int64, intervalSeconds int64, historySize int) {
561561
// Enclose this block in a function to ensure the lock will always be released.
562+
warningCount := int(sei.StmtCtx.WarningCount())
563+
affectedRows := sei.StmtCtx.AffectedRows()
562564
ssElement, isElementNew := func() (*stmtSummaryByDigestElement, bool) {
563565
ssbd.Lock()
564566
defer ssbd.Unlock()
565567

566568
if !ssbd.initialized {
567569
ssbd.init(sei, beginTime, intervalSeconds, historySize)
568570
}
569-
ssbd.cumulative.add(sei)
571+
ssbd.cumulative.add(sei, warningCount, affectedRows)
570572

571573
var ssElement *stmtSummaryByDigestElement
572574
isElementNew := true
@@ -582,7 +584,7 @@ func (ssbd *stmtSummaryByDigest) add(sei *StmtExecInfo, beginTime int64, interva
582584
}
583585
if isElementNew {
584586
// If the element is new created, `ssElement.add(sei)` should be done inside the lock of `ssbd`.
585-
ssElement = newStmtSummaryByDigestElement(sei, beginTime, intervalSeconds)
587+
ssElement = newStmtSummaryByDigestElement(sei, beginTime, intervalSeconds, warningCount, affectedRows)
586588
if ssElement == nil {
587589
return nil, isElementNew
588590
}
@@ -600,7 +602,7 @@ func (ssbd *stmtSummaryByDigest) add(sei *StmtExecInfo, beginTime int64, interva
600602

601603
// Lock a single entry, not the whole `ssbd`.
602604
if !isElementNew {
603-
ssElement.add(sei, intervalSeconds)
605+
ssElement.add(sei, intervalSeconds, warningCount, affectedRows)
604606
}
605607
}
606608

@@ -666,12 +668,12 @@ func newStmtSummaryStats(sei *StmtExecInfo) *stmtSummaryStats {
666668
}
667669
}
668670

669-
func newStmtSummaryByDigestElement(sei *StmtExecInfo, beginTime int64, intervalSeconds int64) *stmtSummaryByDigestElement {
671+
func newStmtSummaryByDigestElement(sei *StmtExecInfo, beginTime int64, intervalSeconds int64, warningCount int, affectedRows uint64) *stmtSummaryByDigestElement {
670672
ssElement := &stmtSummaryByDigestElement{
671673
beginTime: beginTime,
672674
stmtSummaryStats: *newStmtSummaryStats(sei),
673675
}
674-
ssElement.add(sei, intervalSeconds)
676+
ssElement.add(sei, intervalSeconds, warningCount, affectedRows)
675677
return ssElement
676678
}
677679

@@ -693,7 +695,7 @@ func (ssElement *stmtSummaryByDigestElement) onExpire(intervalSeconds int64) {
693695
}
694696
}
695697

696-
func (ssStats *stmtSummaryStats) add(sei *StmtExecInfo) {
698+
func (ssStats *stmtSummaryStats) add(sei *StmtExecInfo, warningCount int, affectedRows uint64) {
697699
// add user to auth users set
698700
if len(sei.User) > 0 {
699701
if _, exist := ssStats.authUsers[sei.User]; !exist {
@@ -705,7 +707,7 @@ func (ssStats *stmtSummaryStats) add(sei *StmtExecInfo) {
705707
if !sei.Succeed {
706708
ssStats.sumErrors++
707709
}
708-
ssStats.sumWarnings += int(sei.StmtCtx.WarningCount())
710+
ssStats.sumWarnings += warningCount
709711

710712
// latency
711713
ssStats.sumLatency += sei.TotalLatency
@@ -863,7 +865,7 @@ func (ssStats *stmtSummaryStats) add(sei *StmtExecInfo) {
863865
}
864866

865867
// other
866-
ssStats.sumAffectedRows += sei.StmtCtx.AffectedRows()
868+
ssStats.sumAffectedRows += uint64(affectedRows)
867869
ssStats.sumMem += sei.MemMax
868870
if sei.MemMax > ssStats.maxMem {
869871
ssStats.maxMem = sei.MemMax
@@ -907,13 +909,13 @@ func (ssStats *stmtSummaryStats) add(sei *StmtExecInfo) {
907909
ssStats.StmtRUSummary.Add(sei.RUDetail)
908910
}
909911

910-
func (ssElement *stmtSummaryByDigestElement) add(sei *StmtExecInfo, intervalSeconds int64) {
912+
func (ssElement *stmtSummaryByDigestElement) add(sei *StmtExecInfo, intervalSeconds int64, warningCount int, affectedRows uint64) {
911913
ssElement.Lock()
912914
defer ssElement.Unlock()
913915

914916
// refreshInterval may change anytime, update endTime ASAP.
915917
ssElement.endTime = ssElement.beginTime + intervalSeconds
916-
ssElement.stmtSummaryStats.add(sei)
918+
ssElement.stmtSummaryStats.add(sei, warningCount, affectedRows)
917919
}
918920

919921
// Truncate SQL to maxSQLLength.

0 commit comments

Comments
 (0)