From bb287938a0e2afeb6d4ae0854eb8aec2f0b9a6b8 Mon Sep 17 00:00:00 2001 From: xy720 <22125576+xy720@users.noreply.github.com> Date: Mon, 17 Aug 2026 17:27:18 +0800 Subject: [PATCH] [fix](mtmv) reuse Gson instance in MTMVTask.getTvfInfo to avoid Master FE CPU spike (#66792) Reusing the Gson object can prevent repeated calls to getAdapter, avoiding the issue where tasks('type'='mv') TVF invocations could saturate the Master CPU in scenarios with a large number of materialized view refresh tasks running in the cluster. --- .../org/apache/doris/job/extensions/mtmv/MTMVTask.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/job/extensions/mtmv/MTMVTask.java b/fe/fe-core/src/main/java/org/apache/doris/job/extensions/mtmv/MTMVTask.java index 5d9b9f6c50e7d6..ed4875a49498e4 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/job/extensions/mtmv/MTMVTask.java +++ b/fe/fe-core/src/main/java/org/apache/doris/job/extensions/mtmv/MTMVTask.java @@ -97,6 +97,8 @@ public class MTMVTask extends AbstractTask { private static final Logger LOG = LogManager.getLogger(MTMVTask.class); public static final int DEFAULT_REFRESH_PARTITION_NUM = 1; + private static final Gson GSON = new Gson(); + public static final ImmutableList SCHEMA = ImmutableList.of( new Column("TaskId", ScalarType.createStringType()), new Column("JobId", ScalarType.createStringType()), @@ -544,16 +546,16 @@ public TRow getTvfInfo(String jobName) { (super.getFinishTimeMs() == null || super.getFinishTimeMs() == 0) ? FeConstants.null_string : String.valueOf(super.getFinishTimeMs() - super.getStartTimeMs()))); trow.addToColumnValue(new TCell() - .setStringVal(taskContext == null ? FeConstants.null_string : new Gson().toJson(taskContext))); + .setStringVal(taskContext == null ? FeConstants.null_string : GSON.toJson(taskContext))); trow.addToColumnValue( new TCell().setStringVal(refreshMode == null ? FeConstants.null_string : refreshMode.toString())); trow.addToColumnValue( new TCell().setStringVal( - needRefreshPartitions == null ? FeConstants.null_string : new Gson().toJson( + needRefreshPartitions == null ? FeConstants.null_string : GSON.toJson( needRefreshPartitions))); trow.addToColumnValue( new TCell().setStringVal( - completedPartitions == null ? FeConstants.null_string : new Gson().toJson( + completedPartitions == null ? FeConstants.null_string : GSON.toJson( completedPartitions))); trow.addToColumnValue( new TCell().setStringVal(getProgress()));