Skip to content

Commit

Permalink
This is an automated cherry-pick of pingcap#44897
Browse files Browse the repository at this point in the history
Signed-off-by: ti-chi-bot <ti-community-prow-bot@tidb.io>
  • Loading branch information
jackysp authored and ti-chi-bot committed Aug 18, 2023
1 parent 76953b2 commit ea7c8dd
Show file tree
Hide file tree
Showing 5 changed files with 347 additions and 7 deletions.
9 changes: 9 additions & 0 deletions executor/adapter.go
Original file line number Diff line number Diff line change
Expand Up @@ -1601,9 +1601,18 @@ func (a *ExecStmt) LogSlowQuery(txnTS uint64, succ bool, hasMoreResults bool) {
totalCopProcHistogramInternal.Observe(execDetail.TimeDetail.ProcessTime.Seconds())
totalCopWaitHistogramInternal.Observe(execDetail.TimeDetail.WaitTime.Seconds())
} else {
<<<<<<< HEAD
totalQueryProcHistogramGeneral.Observe(costTime.Seconds())
totalCopProcHistogramGeneral.Observe(execDetail.TimeDetail.ProcessTime.Seconds())
totalCopWaitHistogramGeneral.Observe(execDetail.TimeDetail.WaitTime.Seconds())
=======
executor_metrics.TotalQueryProcHistogramGeneral.Observe(costTime.Seconds())
executor_metrics.TotalCopProcHistogramGeneral.Observe(execDetail.TimeDetail.ProcessTime.Seconds())
executor_metrics.TotalCopWaitHistogramGeneral.Observe(execDetail.TimeDetail.WaitTime.Seconds())
if execDetail.ScanDetail != nil && execDetail.ScanDetail.ProcessedKeys != 0 {
executor_metrics.CopMVCCRatioHistogramGeneral.Observe(float64(execDetail.ScanDetail.TotalKeys) / float64(execDetail.ScanDetail.ProcessedKeys))
}
>>>>>>> d6143a20539 (*: add MVCC version ratio to slow log metrics (#44897))
}
var userString string
if sessVars.User != nil {
Expand Down
251 changes: 251 additions & 0 deletions executor/metrics/metrics.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,251 @@
// Copyright 2023 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package metrics

import (
"github.com/pingcap/tidb/metrics"
"github.com/prometheus/client_golang/prometheus"
)

// phases
const (
PhaseBuildLocking = "build:locking"
PhaseOpenLocking = "open:locking"
PhaseNextLocking = "next:locking"
PhaseLockLocking = "lock:locking"
PhaseBuildFinal = "build:final"
PhaseOpenFinal = "open:final"
PhaseNextFinal = "next:final"
PhaseLockFinal = "lock:final"
PhaseCommitPrewrite = "commit:prewrite"
PhaseCommitCommit = "commit:commit"
PhaseCommitWaitCommitTS = "commit:wait:commit-ts"
PhaseCommitWaitLatestTS = "commit:wait:latest-ts"
PhaseCommitWaitLatch = "commit:wait:local-latch"
PhaseCommitWaitBinlog = "commit:wait:prewrite-binlog"
PhaseWriteResponse = "write-response"
)

// executor metrics vars
var (
TotalQueryProcHistogramGeneral prometheus.Observer
TotalCopProcHistogramGeneral prometheus.Observer
TotalCopWaitHistogramGeneral prometheus.Observer
CopMVCCRatioHistogramGeneral prometheus.Observer
TotalQueryProcHistogramInternal prometheus.Observer
TotalCopProcHistogramInternal prometheus.Observer
TotalCopWaitHistogramInternal prometheus.Observer

SelectForUpdateFirstAttemptDuration prometheus.Observer
SelectForUpdateRetryDuration prometheus.Observer
DmlFirstAttemptDuration prometheus.Observer
DmlRetryDuration prometheus.Observer

// FairLockingTxnUsedCount counts transactions where at least one statement has fair locking enabled.
FairLockingTxnUsedCount prometheus.Counter
// FairLockingStmtUsedCount counts statements that have fair locking enabled.
FairLockingStmtUsedCount prometheus.Counter
// FairLockingTxnEffectiveCount counts transactions where at least one statement has fair locking enabled,
// and it takes effect (which is determined according to whether lock-with-conflict has occurred during execution).
FairLockingTxnEffectiveCount prometheus.Counter
// FairLockingStmtEffectiveCount counts statements where at least one statement has fair locking enabled,
// and it takes effect (which is determined according to whether lock-with-conflict has occurred during execution).
FairLockingStmtEffectiveCount prometheus.Counter

FastAnalyzeHistogramSample prometheus.Observer
FastAnalyzeHistogramAccessRegions prometheus.Observer
FastAnalyzeHistogramScanKeys prometheus.Observer

ExecutorCounterMergeJoinExec prometheus.Counter
ExecutorCountHashJoinExec prometheus.Counter
ExecutorCounterHashAggExec prometheus.Counter
ExecutorStreamAggExec prometheus.Counter
ExecutorCounterSortExec prometheus.Counter
ExecutorCounterTopNExec prometheus.Counter
ExecutorCounterNestedLoopApplyExec prometheus.Counter
ExecutorCounterIndexLookUpJoin prometheus.Counter
ExecutorCounterIndexLookUpExecutor prometheus.Counter
ExecutorCounterIndexMergeReaderExecutor prometheus.Counter

SessionExecuteRunDurationInternal prometheus.Observer
SessionExecuteRunDurationGeneral prometheus.Observer
TotalTiFlashQuerySuccCounter prometheus.Counter

// pre-define observers for non-internal queries
ExecBuildLocking prometheus.Observer
ExecOpenLocking prometheus.Observer
ExecNextLocking prometheus.Observer
ExecLockLocking prometheus.Observer
ExecBuildFinal prometheus.Observer
ExecOpenFinal prometheus.Observer
ExecNextFinal prometheus.Observer
ExecLockFinal prometheus.Observer
ExecCommitPrewrite prometheus.Observer
ExecCommitCommit prometheus.Observer
ExecCommitWaitCommitTS prometheus.Observer
ExecCommitWaitLatestTS prometheus.Observer
ExecCommitWaitLatch prometheus.Observer
ExecCommitWaitBinlog prometheus.Observer
ExecWriteResponse prometheus.Observer
ExecUnknown prometheus.Observer

// pre-define observers for internal queries
ExecBuildLockingInternal prometheus.Observer
ExecOpenLockingInternal prometheus.Observer
ExecNextLockingInternal prometheus.Observer
ExecLockLockingInternal prometheus.Observer
ExecBuildFinalInternal prometheus.Observer
ExecOpenFinalInternal prometheus.Observer
ExecNextFinalInternal prometheus.Observer
ExecLockFinalInternal prometheus.Observer
ExecCommitPrewriteInternal prometheus.Observer
ExecCommitCommitInternal prometheus.Observer
ExecCommitWaitCommitTSInternal prometheus.Observer
ExecCommitWaitLatestTSInternal prometheus.Observer
ExecCommitWaitLatchInternal prometheus.Observer
ExecCommitWaitBinlogInternal prometheus.Observer
ExecWriteResponseInternal prometheus.Observer
ExecUnknownInternal prometheus.Observer

TransactionDurationPessimisticRollbackInternal prometheus.Observer
TransactionDurationPessimisticRollbackGeneral prometheus.Observer
TransactionDurationOptimisticRollbackInternal prometheus.Observer
TransactionDurationOptimisticRollbackGeneral prometheus.Observer

PhaseDurationObserverMap map[string]prometheus.Observer
PhaseDurationObserverMapInternal map[string]prometheus.Observer
)

func init() {
InitMetricsVars()
InitPhaseDurationObserverMap()
}

// InitMetricsVars init executor metrics vars.
func InitMetricsVars() {
TotalQueryProcHistogramGeneral = metrics.TotalQueryProcHistogram.WithLabelValues(metrics.LblGeneral)
TotalCopProcHistogramGeneral = metrics.TotalCopProcHistogram.WithLabelValues(metrics.LblGeneral)
TotalCopWaitHistogramGeneral = metrics.TotalCopWaitHistogram.WithLabelValues(metrics.LblGeneral)
CopMVCCRatioHistogramGeneral = metrics.CopMVCCRatioHistogram.WithLabelValues(metrics.LblGeneral)
TotalQueryProcHistogramInternal = metrics.TotalQueryProcHistogram.WithLabelValues(metrics.LblInternal)
TotalCopProcHistogramInternal = metrics.TotalCopProcHistogram.WithLabelValues(metrics.LblInternal)
TotalCopWaitHistogramInternal = metrics.TotalCopWaitHistogram.WithLabelValues(metrics.LblInternal)

SelectForUpdateFirstAttemptDuration = metrics.PessimisticDMLDurationByAttempt.WithLabelValues("select-for-update", "first-attempt")
SelectForUpdateRetryDuration = metrics.PessimisticDMLDurationByAttempt.WithLabelValues("select-for-update", "retry")
DmlFirstAttemptDuration = metrics.PessimisticDMLDurationByAttempt.WithLabelValues("dml", "first-attempt")
DmlRetryDuration = metrics.PessimisticDMLDurationByAttempt.WithLabelValues("dml", "retry")

FairLockingTxnUsedCount = metrics.FairLockingUsageCount.WithLabelValues(metrics.LblFairLockingTxnUsed)
FairLockingStmtUsedCount = metrics.FairLockingUsageCount.WithLabelValues(metrics.LblFairLockingStmtUsed)
FairLockingTxnEffectiveCount = metrics.FairLockingUsageCount.WithLabelValues(metrics.LblFairLockingTxnEffective)
FairLockingStmtEffectiveCount = metrics.FairLockingUsageCount.WithLabelValues(metrics.LblFairLockingStmtEffective)

FastAnalyzeHistogramSample = metrics.FastAnalyzeHistogram.WithLabelValues(metrics.LblGeneral, "sample")
FastAnalyzeHistogramAccessRegions = metrics.FastAnalyzeHistogram.WithLabelValues(metrics.LblGeneral, "access_regions")
FastAnalyzeHistogramScanKeys = metrics.FastAnalyzeHistogram.WithLabelValues(metrics.LblGeneral, "scan_keys")

ExecutorCounterMergeJoinExec = metrics.ExecutorCounter.WithLabelValues("MergeJoinExec")
ExecutorCountHashJoinExec = metrics.ExecutorCounter.WithLabelValues("HashJoinExec")
ExecutorCounterHashAggExec = metrics.ExecutorCounter.WithLabelValues("HashAggExec")
ExecutorStreamAggExec = metrics.ExecutorCounter.WithLabelValues("StreamAggExec")
ExecutorCounterSortExec = metrics.ExecutorCounter.WithLabelValues("SortExec")
ExecutorCounterTopNExec = metrics.ExecutorCounter.WithLabelValues("TopNExec")
ExecutorCounterNestedLoopApplyExec = metrics.ExecutorCounter.WithLabelValues("NestedLoopApplyExec")
ExecutorCounterIndexLookUpJoin = metrics.ExecutorCounter.WithLabelValues("IndexLookUpJoin")
ExecutorCounterIndexLookUpExecutor = metrics.ExecutorCounter.WithLabelValues("IndexLookUpExecutor")
ExecutorCounterIndexMergeReaderExecutor = metrics.ExecutorCounter.WithLabelValues("IndexMergeReaderExecutor")

SessionExecuteRunDurationInternal = metrics.SessionExecuteRunDuration.WithLabelValues(metrics.LblInternal)
SessionExecuteRunDurationGeneral = metrics.SessionExecuteRunDuration.WithLabelValues(metrics.LblGeneral)
TotalTiFlashQuerySuccCounter = metrics.TiFlashQueryTotalCounter.WithLabelValues("", metrics.LblOK)

ExecBuildLocking = metrics.ExecPhaseDuration.WithLabelValues(PhaseBuildLocking, "0")
ExecOpenLocking = metrics.ExecPhaseDuration.WithLabelValues(PhaseOpenLocking, "0")
ExecNextLocking = metrics.ExecPhaseDuration.WithLabelValues(PhaseNextLocking, "0")
ExecLockLocking = metrics.ExecPhaseDuration.WithLabelValues(PhaseLockLocking, "0")
ExecBuildFinal = metrics.ExecPhaseDuration.WithLabelValues(PhaseBuildFinal, "0")
ExecOpenFinal = metrics.ExecPhaseDuration.WithLabelValues(PhaseOpenFinal, "0")
ExecNextFinal = metrics.ExecPhaseDuration.WithLabelValues(PhaseNextFinal, "0")
ExecLockFinal = metrics.ExecPhaseDuration.WithLabelValues(PhaseLockFinal, "0")
ExecCommitPrewrite = metrics.ExecPhaseDuration.WithLabelValues(PhaseCommitPrewrite, "0")
ExecCommitCommit = metrics.ExecPhaseDuration.WithLabelValues(PhaseCommitCommit, "0")
ExecCommitWaitCommitTS = metrics.ExecPhaseDuration.WithLabelValues(PhaseCommitWaitCommitTS, "0")
ExecCommitWaitLatestTS = metrics.ExecPhaseDuration.WithLabelValues(PhaseCommitWaitLatestTS, "0")
ExecCommitWaitLatch = metrics.ExecPhaseDuration.WithLabelValues(PhaseCommitWaitLatch, "0")
ExecCommitWaitBinlog = metrics.ExecPhaseDuration.WithLabelValues(PhaseCommitWaitBinlog, "0")
ExecWriteResponse = metrics.ExecPhaseDuration.WithLabelValues(PhaseWriteResponse, "0")
ExecUnknown = metrics.ExecPhaseDuration.WithLabelValues("unknown", "0")

ExecBuildLockingInternal = metrics.ExecPhaseDuration.WithLabelValues(PhaseBuildLocking, "1")
ExecOpenLockingInternal = metrics.ExecPhaseDuration.WithLabelValues(PhaseOpenLocking, "1")
ExecNextLockingInternal = metrics.ExecPhaseDuration.WithLabelValues(PhaseNextLocking, "1")
ExecLockLockingInternal = metrics.ExecPhaseDuration.WithLabelValues(PhaseLockLocking, "1")
ExecBuildFinalInternal = metrics.ExecPhaseDuration.WithLabelValues(PhaseBuildFinal, "1")
ExecOpenFinalInternal = metrics.ExecPhaseDuration.WithLabelValues(PhaseOpenFinal, "1")
ExecNextFinalInternal = metrics.ExecPhaseDuration.WithLabelValues(PhaseNextFinal, "1")
ExecLockFinalInternal = metrics.ExecPhaseDuration.WithLabelValues(PhaseLockFinal, "1")
ExecCommitPrewriteInternal = metrics.ExecPhaseDuration.WithLabelValues(PhaseCommitPrewrite, "1")
ExecCommitCommitInternal = metrics.ExecPhaseDuration.WithLabelValues(PhaseCommitCommit, "1")
ExecCommitWaitCommitTSInternal = metrics.ExecPhaseDuration.WithLabelValues(PhaseCommitWaitCommitTS, "1")
ExecCommitWaitLatestTSInternal = metrics.ExecPhaseDuration.WithLabelValues(PhaseCommitWaitLatestTS, "1")
ExecCommitWaitLatchInternal = metrics.ExecPhaseDuration.WithLabelValues(PhaseCommitWaitLatch, "1")
ExecCommitWaitBinlogInternal = metrics.ExecPhaseDuration.WithLabelValues(PhaseCommitWaitBinlog, "1")
ExecWriteResponseInternal = metrics.ExecPhaseDuration.WithLabelValues(PhaseWriteResponse, "1")
ExecUnknownInternal = metrics.ExecPhaseDuration.WithLabelValues("unknown", "1")

TransactionDurationPessimisticRollbackInternal = metrics.TransactionDuration.WithLabelValues(metrics.LblPessimistic, metrics.LblRollback, metrics.LblInternal)
TransactionDurationPessimisticRollbackGeneral = metrics.TransactionDuration.WithLabelValues(metrics.LblPessimistic, metrics.LblRollback, metrics.LblGeneral)
TransactionDurationOptimisticRollbackInternal = metrics.TransactionDuration.WithLabelValues(metrics.LblOptimistic, metrics.LblRollback, metrics.LblInternal)
TransactionDurationOptimisticRollbackGeneral = metrics.TransactionDuration.WithLabelValues(metrics.LblOptimistic, metrics.LblRollback, metrics.LblGeneral)
}

// InitPhaseDurationObserverMap init observer map
func InitPhaseDurationObserverMap() {
PhaseDurationObserverMap = map[string]prometheus.Observer{
PhaseBuildLocking: ExecBuildLocking,
PhaseOpenLocking: ExecOpenLocking,
PhaseNextLocking: ExecNextLocking,
PhaseLockLocking: ExecLockLocking,
PhaseBuildFinal: ExecBuildFinal,
PhaseOpenFinal: ExecOpenFinal,
PhaseNextFinal: ExecNextFinal,
PhaseLockFinal: ExecLockFinal,
PhaseCommitPrewrite: ExecCommitPrewrite,
PhaseCommitCommit: ExecCommitCommit,
PhaseCommitWaitCommitTS: ExecCommitWaitCommitTS,
PhaseCommitWaitLatestTS: ExecCommitWaitLatestTS,
PhaseCommitWaitLatch: ExecCommitWaitLatch,
PhaseCommitWaitBinlog: ExecCommitWaitBinlog,
PhaseWriteResponse: ExecWriteResponse,
}
PhaseDurationObserverMapInternal = map[string]prometheus.Observer{
PhaseBuildLocking: ExecBuildLockingInternal,
PhaseOpenLocking: ExecOpenLockingInternal,
PhaseNextLocking: ExecNextLockingInternal,
PhaseLockLocking: ExecLockLockingInternal,
PhaseBuildFinal: ExecBuildFinalInternal,
PhaseOpenFinal: ExecOpenFinalInternal,
PhaseNextFinal: ExecNextFinalInternal,
PhaseLockFinal: ExecLockFinalInternal,
PhaseCommitPrewrite: ExecCommitPrewriteInternal,
PhaseCommitCommit: ExecCommitCommitInternal,
PhaseCommitWaitCommitTS: ExecCommitWaitCommitTSInternal,
PhaseCommitWaitLatestTS: ExecCommitWaitLatestTSInternal,
PhaseCommitWaitLatch: ExecCommitWaitLatchInternal,
PhaseCommitWaitBinlog: ExecCommitWaitBinlogInternal,
PhaseWriteResponse: ExecWriteResponseInternal,
}
}
29 changes: 22 additions & 7 deletions metrics/grafana/tidb.json
Original file line number Diff line number Diff line change
Expand Up @@ -814,31 +814,44 @@
"pointradius": 5,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"seriesOverrides": [
{
"$$hashKey": "object:211",
"alias": "/mvcc_ratio/",
"yaxis": 2
}
],
"spaceLength": 10,
"stack": false,
"steppedLine": false,
"targets": [
{
"expr": "histogram_quantile(0.90, sum(rate(tidb_server_slow_query_process_duration_seconds_bucket{k8s_cluster=\"$k8s_cluster\", tidb_cluster=\"$tidb_cluster\", instance=~\"$instance\"}[1m])) by (le,sql_type))",
"expr": "histogram_quantile(0.90, sum(rate(tidb_server_slow_query_process_duration_seconds_bucket{k8s_cluster=\"$k8s_cluster\", tidb_cluster=\"$tidb_cluster\", instance=~\"$instance\", sql_type=\"general\"}[1m])) by (le,sql_type))",
"format": "time_series",
"intervalFactor": 2,
"legendFormat": "all_proc_{{sql_type}}",
"legendFormat": "all_proc",
"refId": "A"
},
{
"expr": "histogram_quantile(0.90, sum(rate(tidb_server_slow_query_cop_duration_seconds_bucket{k8s_cluster=\"$k8s_cluster\", tidb_cluster=\"$tidb_cluster\", instance=~\"$instance\"}[1m])) by (le,sql_type))",
"expr": "histogram_quantile(0.90, sum(rate(tidb_server_slow_query_cop_duration_seconds_bucket{k8s_cluster=\"$k8s_cluster\", tidb_cluster=\"$tidb_cluster\", instance=~\"$instance\", sql_type=\"general\"}[1m])) by (le,sql_type))",
"format": "time_series",
"intervalFactor": 2,
"legendFormat": "all_cop_proc_{{sql_type}}",
"legendFormat": "all_cop_proc",
"refId": "B"
},
{
"expr": "histogram_quantile(0.90, sum(rate(tidb_server_slow_query_wait_duration_seconds_bucket{k8s_cluster=\"$k8s_cluster\", tidb_cluster=\"$tidb_cluster\", instance=~\"$instance\"}[1m])) by (le,sql_type))",
"expr": "histogram_quantile(0.90, sum(rate(tidb_server_slow_query_wait_duration_seconds_bucket{k8s_cluster=\"$k8s_cluster\", tidb_cluster=\"$tidb_cluster\", instance=~\"$instance\", sql_type=\"general\"}[1m])) by (le,sql_type))",
"format": "time_series",
"intervalFactor": 2,
"legendFormat": "all_cop_wait_{{sql_type}}",
"legendFormat": "all_cop_wait",
"refId": "C"
},
{
"expr": "histogram_quantile(0.90, sum(rate(tidb_server_slow_query_cop_mvcc_ratio_bucket{k8s_cluster=\"$k8s_cluster\", tidb_cluster=\"$tidb_cluster\", instance=~\"$instance\", sql_type=\"general\"}[1m])) by (le,sql_type))",
"format": "time_series",
"intervalFactor": 2,
"legendFormat": "mvcc_ratio",
"refId": "D"
}
],
"thresholds": [],
Expand All @@ -861,6 +874,7 @@
},
"yaxes": [
{
"$$hashKey": "object:119",
"format": "s",
"label": null,
"logBase": 2,
Expand All @@ -869,6 +883,7 @@
"show": true
},
{
"$$hashKey": "object:120",
"format": "short",
"label": null,
"logBase": 1,
Expand Down
1 change: 1 addition & 0 deletions metrics/metrics.go
Original file line number Diff line number Diff line change
Expand Up @@ -174,6 +174,7 @@ func RegisterMetrics() {
prometheus.MustRegister(TotalQueryProcHistogram)
prometheus.MustRegister(TotalCopProcHistogram)
prometheus.MustRegister(TotalCopWaitHistogram)
prometheus.MustRegister(CopMVCCRatioHistogram)
prometheus.MustRegister(HandleSchemaValidate)
prometheus.MustRegister(MaxProcs)
prometheus.MustRegister(GOGC)
Expand Down
Loading

0 comments on commit ea7c8dd

Please sign in to comment.