From bf341b39bd281255cd480f3412a004a625c61a41 Mon Sep 17 00:00:00 2001 From: Mattias Jonsson Date: Fri, 30 Dec 2022 11:16:59 +0000 Subject: [PATCH 1/2] Adding telemetry for alter table reorganize partition --- executor/adapter.go | 3 ++- executor/builder.go | 7 ++++++- metrics/telemetry.go | 31 +++++++++++++++++++--------- session/session.go | 6 +++++- telemetry/data_feature_usage_test.go | 5 +++++ 5 files changed, 39 insertions(+), 13 deletions(-) diff --git a/executor/adapter.go b/executor/adapter.go index 5e12cce1ccc69..e0e4a7e7727dc 100644 --- a/executor/adapter.go +++ b/executor/adapter.go @@ -194,7 +194,7 @@ type TelemetryInfo struct { UseNonRecursive bool UseRecursive bool UseMultiSchemaChange bool - UesExchangePartition bool + UseExchangePartition bool UseFlashbackToCluster bool PartitionTelemetry *PartitionTelemetryInfo AccountLockTelemetry *AccountLockTelemetryInfo @@ -217,6 +217,7 @@ type PartitionTelemetryInfo struct { UseAddIntervalPartition bool UseDropIntervalPartition bool UseCompactTablePartition bool + UseReorganizePartition bool } // AccountLockTelemetryInfo records account lock/unlock information during execution diff --git a/executor/builder.go b/executor/builder.go index d4270397eecd0..e7f9c070bb9ef 100644 --- a/executor/builder.go +++ b/executor/builder.go @@ -1086,7 +1086,12 @@ func (b *executorBuilder) setTelemetryInfo(v *plannercore.DDL) { } b.Ti.PartitionTelemetry.UseAddIntervalPartition = true case ast.AlterTableExchangePartition: - b.Ti.UesExchangePartition = true + b.Ti.UseExchangePartition = true + case ast.AlterTableReorganizePartition: + if b.Ti.PartitionTelemetry == nil { + b.Ti.PartitionTelemetry = &PartitionTelemetryInfo{} + } + b.Ti.PartitionTelemetry.UseReorganizePartition = true } } case *ast.CreateTableStmt: diff --git a/metrics/telemetry.go b/metrics/telemetry.go index 591823f9952d9..6b7dbef4e8d5d 100644 --- a/metrics/telemetry.go +++ b/metrics/telemetry.go @@ -169,6 +169,13 @@ var ( Name: "compact_partition_usage", Help: "Counter of compact table partition", }) + TelemetryReorganizePartitionCnt = prometheus.NewCounter( + prometheus.CounterOpts{ + Namespace: "tidb", + Subsystem: "telemetry", + Name: "reorganize_partition_usage", + Help: "Counter of alter table reorganize partition", + }) ) // readCounter reads the value of a prometheus.Counter. @@ -269,6 +276,7 @@ type TablePartitionUsageCounter struct { TablePartitionAddIntervalPartitionsCnt int64 `json:"table_partition_add_interval_partitions_cnt"` TablePartitionDropIntervalPartitionsCnt int64 `json:"table_partition_drop_interval_partitions_cnt"` TablePartitionComactCnt int64 `json:"table_TablePartitionComactCnt"` + TablePartitionReorganizePartitionCnt int64 `json:"table_reorganize_partition_cnt"` } // ExchangePartitionUsageCounter records the usages of exchange partition. @@ -307,22 +315,24 @@ func (c TablePartitionUsageCounter) Cal(rhs TablePartitionUsageCounter) TablePar TablePartitionAddIntervalPartitionsCnt: c.TablePartitionAddIntervalPartitionsCnt - rhs.TablePartitionAddIntervalPartitionsCnt, TablePartitionDropIntervalPartitionsCnt: c.TablePartitionDropIntervalPartitionsCnt - rhs.TablePartitionDropIntervalPartitionsCnt, TablePartitionComactCnt: c.TablePartitionComactCnt - rhs.TablePartitionComactCnt, + TablePartitionReorganizePartitionCnt: c.TablePartitionReorganizePartitionCnt - rhs.TablePartitionReorganizePartitionCnt, } } // ResetTablePartitionCounter gets the TxnCommitCounter. func ResetTablePartitionCounter(pre TablePartitionUsageCounter) TablePartitionUsageCounter { return TablePartitionUsageCounter{ - TablePartitionCnt: readCounter(TelemetryTablePartitionCnt), - TablePartitionListCnt: readCounter(TelemetryTablePartitionListCnt), - TablePartitionRangeCnt: readCounter(TelemetryTablePartitionRangeCnt), - TablePartitionHashCnt: readCounter(TelemetryTablePartitionHashCnt), - TablePartitionRangeColumnsCnt: readCounter(TelemetryTablePartitionRangeColumnsCnt), - TablePartitionRangeColumnsGt1Cnt: readCounter(TelemetryTablePartitionRangeColumnsGt1Cnt), - TablePartitionRangeColumnsGt2Cnt: readCounter(TelemetryTablePartitionRangeColumnsGt2Cnt), - TablePartitionRangeColumnsGt3Cnt: readCounter(TelemetryTablePartitionRangeColumnsGt3Cnt), - TablePartitionListColumnsCnt: readCounter(TelemetryTablePartitionListColumnsCnt), - TablePartitionMaxPartitionsCnt: mathutil.Max(readCounter(TelemetryTablePartitionMaxPartitionsCnt)-pre.TablePartitionMaxPartitionsCnt, pre.TablePartitionMaxPartitionsCnt), + TablePartitionCnt: readCounter(TelemetryTablePartitionCnt), + TablePartitionListCnt: readCounter(TelemetryTablePartitionListCnt), + TablePartitionRangeCnt: readCounter(TelemetryTablePartitionRangeCnt), + TablePartitionHashCnt: readCounter(TelemetryTablePartitionHashCnt), + TablePartitionRangeColumnsCnt: readCounter(TelemetryTablePartitionRangeColumnsCnt), + TablePartitionRangeColumnsGt1Cnt: readCounter(TelemetryTablePartitionRangeColumnsGt1Cnt), + TablePartitionRangeColumnsGt2Cnt: readCounter(TelemetryTablePartitionRangeColumnsGt2Cnt), + TablePartitionRangeColumnsGt3Cnt: readCounter(TelemetryTablePartitionRangeColumnsGt3Cnt), + TablePartitionListColumnsCnt: readCounter(TelemetryTablePartitionListColumnsCnt), + TablePartitionMaxPartitionsCnt: mathutil.Max(readCounter(TelemetryTablePartitionMaxPartitionsCnt)-pre.TablePartitionMaxPartitionsCnt, pre.TablePartitionMaxPartitionsCnt), + TablePartitionReorganizePartitionCnt: readCounter(TelemetryReorganizePartitionCnt), } } @@ -343,6 +353,7 @@ func GetTablePartitionCounter() TablePartitionUsageCounter { TablePartitionAddIntervalPartitionsCnt: readCounter(TelemetryTablePartitionAddIntervalPartitionsCnt), TablePartitionDropIntervalPartitionsCnt: readCounter(TelemetryTablePartitionDropIntervalPartitionsCnt), TablePartitionComactCnt: readCounter(TelemetryCompactPartitionCnt), + TablePartitionReorganizePartitionCnt: readCounter(TelemetryReorganizePartitionCnt), } } diff --git a/session/session.go b/session/session.go index 8c449dc14faf2..fea3031292313 100644 --- a/session/session.go +++ b/session/session.go @@ -147,6 +147,7 @@ var ( telemetryTablePartitionDropIntervalUsage = metrics.TelemetryTablePartitionDropIntervalPartitionsCnt telemetryExchangePartitionUsage = metrics.TelemetryExchangePartitionCnt telemetryTableCompactPartitionUsage = metrics.TelemetryCompactPartitionCnt + telemetryReorganizePartitionUsage = metrics.TelemetryReorganizePartitionCnt telemetryLockUserUsage = metrics.TelemetryAccountLockCnt.WithLabelValues("lockUser") telemetryUnlockUserUsage = metrics.TelemetryAccountLockCnt.WithLabelValues("unlockUser") @@ -3969,7 +3970,7 @@ func (s *session) updateTelemetryMetric(es *executor.ExecStmt) { telemetryFlashbackClusterUsage.Inc() } - if ti.UesExchangePartition { + if ti.UseExchangePartition { telemetryExchangePartitionUsage.Inc() } @@ -4014,6 +4015,9 @@ func (s *session) updateTelemetryMetric(es *executor.ExecStmt) { if ti.PartitionTelemetry.UseCompactTablePartition { telemetryTableCompactPartitionUsage.Inc() } + if ti.PartitionTelemetry.UseReorganizePartition { + telemetryReorganizePartitionUsage.Inc() + } } if ti.AccountLockTelemetry != nil { diff --git a/telemetry/data_feature_usage_test.go b/telemetry/data_feature_usage_test.go index 369073009c0a4..a893bd2c8d4b2 100644 --- a/telemetry/data_feature_usage_test.go +++ b/telemetry/data_feature_usage_test.go @@ -239,6 +239,7 @@ func TestTablePartition(t *testing.T) { require.Equal(t, int64(0), usage.TablePartition.TablePartitionCreateIntervalPartitionsCnt) require.Equal(t, int64(0), usage.TablePartition.TablePartitionAddIntervalPartitionsCnt) require.Equal(t, int64(0), usage.TablePartition.TablePartitionDropIntervalPartitionsCnt) + require.Equal(t, int64(0), usage.TablePartition.TablePartitionReorganizePartitionCnt) telemetry.PostReportTelemetryDataForTest() tk.MustExec("drop table if exists pt1") @@ -250,6 +251,8 @@ func TestTablePartition(t *testing.T) { "partition p4 values less than (15))") tk.MustExec("alter table pt1 first partition less than (9)") tk.MustExec("alter table pt1 last partition less than (21)") + // TODO: Uncomment when supported + //tk.MustExec("alter table pt1 reorganize partition p4 into (partition p4 values less than (15), partition p5 values less than (18))") tk.MustExec("drop table if exists pt1") tk.MustExec("create table pt1 (d datetime primary key, v varchar(255)) partition by range columns(d)" + " interval (1 day) first partition less than ('2022-01-01') last partition less than ('2022-02-22')") @@ -274,6 +277,8 @@ func TestTablePartition(t *testing.T) { require.Equal(t, int64(1), usage.TablePartition.TablePartitionCreateIntervalPartitionsCnt) require.Equal(t, int64(1), usage.TablePartition.TablePartitionAddIntervalPartitionsCnt) require.Equal(t, int64(1), usage.TablePartition.TablePartitionDropIntervalPartitionsCnt) + // TODO: Uncomment when supported + //require.Equal(t, int64(1), usage.TablePartition.TablePartitionReorganizePartitionCnt) tk.MustExec("drop table if exists pt2") tk.MustExec("create table pt2 (a int,b int) partition by range(a) (" + From 84bca8ba2bd49b63c444138ac59b4f1546340bb8 Mon Sep 17 00:00:00 2001 From: Mattias Jonsson Date: Wed, 18 Jan 2023 00:52:37 +0000 Subject: [PATCH 2/2] Enabled tests. --- telemetry/data_feature_usage_test.go | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/telemetry/data_feature_usage_test.go b/telemetry/data_feature_usage_test.go index fd80afdcd15d0..bea06ef096d06 100644 --- a/telemetry/data_feature_usage_test.go +++ b/telemetry/data_feature_usage_test.go @@ -252,8 +252,7 @@ func TestTablePartition(t *testing.T) { "partition p4 values less than (15))") tk.MustExec("alter table pt1 first partition less than (9)") tk.MustExec("alter table pt1 last partition less than (21)") - // TODO: Uncomment when supported - //tk.MustExec("alter table pt1 reorganize partition p4 into (partition p4 values less than (15), partition p5 values less than (18))") + tk.MustExec("alter table pt1 reorganize partition p4 into (partition p4 values less than (13), partition p5 values less than (15))") tk.MustExec("drop table if exists pt1") tk.MustExec("create table pt1 (d datetime primary key, v varchar(255)) partition by range columns(d)" + " interval (1 day) first partition less than ('2022-01-01') last partition less than ('2022-02-22')") @@ -278,8 +277,7 @@ func TestTablePartition(t *testing.T) { require.Equal(t, int64(1), usage.TablePartition.TablePartitionCreateIntervalPartitionsCnt) require.Equal(t, int64(1), usage.TablePartition.TablePartitionAddIntervalPartitionsCnt) require.Equal(t, int64(1), usage.TablePartition.TablePartitionDropIntervalPartitionsCnt) - // TODO: Uncomment when supported - //require.Equal(t, int64(1), usage.TablePartition.TablePartitionReorganizePartitionCnt) + require.Equal(t, int64(1), usage.TablePartition.TablePartitionReorganizePartitionCnt) tk.MustExec("drop table if exists pt2") tk.MustExec("create table pt2 (a int,b int) partition by range(a) (" +