From 1b119704f87fc722e3bae0fa488129b761657ab1 Mon Sep 17 00:00:00 2001 From: HB Date: Sat, 20 May 2023 11:26:28 +0800 Subject: [PATCH] [Enhancement] show total transactions in show proc "/transactions" (#19492) In a scenario where multiple DBs are simultaneously imported with high concurrency, a significant number of transactions will be generated. Without a summary field, we cannot clearly see how many transactions there are in the current cluster. Therefore, I have enhanced this point. ``` mysql> show proc "/transactions"; +-------+-----------------------------------+-----------------------+ | DbId | DbName | RunningTransactionNum | +-------+-----------------------------------+-----------------------+ | 10002 | default_cluster:xxxx | 0 | | 14005 | default_cluster:__internal_schema | 0 | | Total | 2 | 0 | +-------+-----------------------------------+-----------------------+ 3 rows in set (0.02 sec) ``` --- .../doris/common/proc/TransDbProcDir.java | 18 +----------------- .../transaction/GlobalTransactionMgr.java | 17 ++++++++++++----- 2 files changed, 13 insertions(+), 22 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/common/proc/TransDbProcDir.java b/fe/fe-core/src/main/java/org/apache/doris/common/proc/TransDbProcDir.java index 3c92bec9eb..74aa71116d 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/common/proc/TransDbProcDir.java +++ b/fe/fe-core/src/main/java/org/apache/doris/common/proc/TransDbProcDir.java @@ -19,16 +19,11 @@ package org.apache.doris.common.proc; import org.apache.doris.catalog.Env; import org.apache.doris.common.AnalysisException; -import org.apache.doris.common.util.ListComparator; import org.apache.doris.transaction.GlobalTransactionMgr; import com.google.common.base.Strings; import com.google.common.collect.ImmutableList; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - public class TransDbProcDir implements ProcDirInterface { public static final ImmutableList TITLE_NAMES = new ImmutableList.Builder() .add("DbId") @@ -44,19 +39,8 @@ public class TransDbProcDir implements ProcDirInterface { BaseProcResult result = new BaseProcResult(); result.setNames(TITLE_NAMES); GlobalTransactionMgr transactionMgr = Env.getCurrentGlobalTransactionMgr(); - List> infos = transactionMgr.getDbInfo(); - // order by dbId, asc - ListComparator> comparator = new ListComparator>(0); - Collections.sort(infos, comparator); - for (List info : infos) { - List row = new ArrayList(info.size()); - for (Comparable comparable : info) { - row.add(comparable.toString()); - } - result.addRow(row); - } + result.addRows(transactionMgr.getDbInfo()); return result; - } @Override diff --git a/fe/fe-core/src/main/java/org/apache/doris/transaction/GlobalTransactionMgr.java b/fe/fe-core/src/main/java/org/apache/doris/transaction/GlobalTransactionMgr.java index 25c22786d0..25b3f30259 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/transaction/GlobalTransactionMgr.java +++ b/fe/fe-core/src/main/java/org/apache/doris/transaction/GlobalTransactionMgr.java @@ -55,6 +55,8 @@ import java.io.DataInput; import java.io.DataOutput; import java.io.IOException; import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; import java.util.List; import java.util.Map; import java.util.Set; @@ -492,12 +494,14 @@ public class GlobalTransactionMgr implements Writable { } } - public List> getDbInfo() { - List> infos = new ArrayList>(); + public List> getDbInfo() { + List> infos = new ArrayList<>(); + long totalRunningNum = 0; List dbIds = Lists.newArrayList(dbIdToDatabaseTransactionMgrs.keySet()); + Collections.sort(dbIds); for (long dbId : dbIds) { - List info = new ArrayList(); - info.add(dbId); + List info = new ArrayList<>(); + info.add(String.valueOf(dbId)); Database db = Env.getCurrentInternalCatalog().getDbNullable(dbId); if (db == null) { continue; @@ -507,12 +511,15 @@ public class GlobalTransactionMgr implements Writable { try { DatabaseTransactionMgr dbMgr = getDatabaseTransactionMgr(dbId); runningNum = dbMgr.getRunningTxnNums() + dbMgr.getRunningRoutineLoadTxnNums(); + totalRunningNum += runningNum; } catch (AnalysisException e) { LOG.warn("get database running transaction num failed", e); } - info.add(runningNum); + info.add(String.valueOf(runningNum)); infos.add(info); } + List info = Arrays.asList("0", "Total", String.valueOf(totalRunningNum)); + infos.add(info); return infos; }