Repository: apache/doris
Pull request #49688: [opt](paimon)Enhance the observability of split and JNI in profile
Author: login: wuwenchi
Labels: name: approved
description: Indicates a PR has been approved by one committer.
name: reviewed
name: dev/3.1.0-merged
Created: 2025-03-31T07:23:20Z | Merged: 2025-04-23T20:48:21Z

### What problem does this PR solve?

Problem Summary:
1. Add the display of the weight of the splits assigned to the BE. 
2. Further subdivide the time of the usage of JNI into 'appendDataTime' and 'createVectorTableTime'.
2. Add 'MaxTimeSplitWeight' to represent the splitid with the maximum time consumption. 

When we want to view the JNI indicators in profile, we need to set `profile_level=2`.

```
fe:
      - Splits Assignment Weight: {"172.20.32.136:39051":4,"172.20.32.136:39052":5}


be:
                 - FillBlockTime: 36.241us
                 - JavaAppendDataTime: 54.755us
                 - JavaCreateVectorTableTime: 191.816us
                 - JavaScanTime: 1.368ms
                 - MaxTimeSplitWeight: 460
                 - OpenScannerTime: 19.93ms
```



### Release note

None

### Check List (For Author)

- Test <!-- At least one of them must be included. -->
    - [ ] Regression test
    - [x] Unit Test
    - [ ] Manual test (add detailed scripts or steps below)
    - [ ] No need to test or manual test. Explain why:
        - [ ] This is a refactor/code format and no logic has been changed.
        - [ ] Previous test can cover this change.
        - [ ] No code files have been changed.
        - [ ] Other reason <!-- Add your reason?  -->

- Behavior changed:
    - [x] No.
    - [ ] Yes. <!-- Explain the behavior change -->

- Does this need documentation?
    - [x] No.
    - [ ] Yes. <!-- Add document PR link here. eg: https://github.com/apache/doris-website/pull/1214 -->

### Check List (For Reviewer who merge this PR)

- [ ] Confirm the release note
- [ ] Confirm test cases
- [ ] Confirm document
- [ ] Add branch pick label <!-- Add branch pick label that this PR should merge into -->




Diff:
diff --git a/be/src/util/runtime_profile.cpp b/be/src/util/runtime_profile.cpp
index d9fb718332124f..c39b5853999e7e 100644
--- a/be/src/util/runtime_profile.cpp
+++ b/be/src/util/runtime_profile.cpp
@@ -473,6 +473,31 @@ void RuntimeProfile::add_description(const std::string& name, const std::string&
     child_counters->insert(name);
 }
 
+RuntimeProfile::ConditionCounter* RuntimeProfile::add_conditition_counter(
+        const std::string& name, TUnit::type type, const ConditionCounterFunction& counter_fn,
+        const std::string& parent_counter_name, int64_t level) {
+    std::lock_guard<std::mutex> l(_counter_map_lock);
+
+    if (_counter_map.find(name) != _counter_map.end()) {
+        RuntimeProfile::ConditionCounter* contition_counter =
+                dynamic_cast<ConditionCounter*>(_counter_map[name]);
+        if (contition_counter == nullptr) {
+            throw doris::Exception(doris::ErrorCode::INTERNAL_ERROR,
+                                   "Failed to add a conditition counter that is duplicate and of a "
+                                   "different type for {}.",
+                                   name);
+        }
+        return contition_counter;
+    }
+
+    ConditionCounter* counter = _pool->add(new ConditionCounter(type, counter_fn, level));
+    _counter_map[name] = counter;
+    std::set<std::string>* child_counters =
+            find_or_insert(&_child_counter_map, parent_counter_name, std::set<std::string>());
+    child_counters->insert(name);
+    return counter;
+}
+
 RuntimeProfile::Counter* RuntimeProfile::get_counter(const std::string& name) {
     std::lock_guard<std::mutex> l(_counter_map_lock);
 
diff --git a/be/src/util/runtime_profile.h b/be/src/util/runtime_profile.h
index ee9a71ee900600..14d14a1195d3e6 100644
--- a/be/src/util/runtime_profile.h
+++ b/be/src/util/runtime_profile.h
@@ -278,6 +278,48 @@ class RuntimeProfile {
         DerivedCounterFunction _counter_fn;
     };
 
+    using ConditionCounterFunction = std::function<bool(int64_t, int64_t)>;
+
+    // ConditionCounter is a specialized counter that only updates its value when a specific condition is met.
+    // It uses a condition function (condition_func) to determine when the counter's value should be updated.
+    // This type of counter is particularly useful for tracking maximum values, minimum values, or other metrics
+    // that should only be updated when they meet certain criteria.
+    // For example, it can be used to record the maximum value of a specific metric during query execution,
+    // or to update the counter only when a new value exceeds some threshold.
+    class ConditionCounter : public Counter {
+    public:
+        ConditionCounter(TUnit::type type, const ConditionCounterFunction& condition_func,
+                         int64_t level = 2, int64_t condition = 0, int64_t value = 0)
+                : Counter(type, value, level),
+                  _condition(condition),
+                  _value(value),
+                  _condition_func(condition_func) {}
+
+        Counter* clone() const override {
+            std::lock_guard<std::mutex> l(_mutex);
+            return new ConditionCounter(type(), _condition_func, _condition, value(), level());
+        }
+
+        int64_t value() const override {
+            std::lock_guard<std::mutex> l(_mutex);
+            return _value;
+        }
+
+        void conditional_update(int64_t c, int64_t v) {
+            std::lock_guard<std::mutex> l(_mutex);
+            if (_condition_func(_condition, c)) {
+                _value = v;
+                _condition = c;
+            }
+        }
+
+    private:
+        mutable std::mutex _mutex;
+        int64_t _condition;
+        int64_t _value;
+        ConditionCounterFunction _condition_func;
+    };
+
     // NonZeroCounter will not be converted to Thrift if the value is 0.
     class NonZeroCounter : public Counter {
     public:
@@ -392,6 +434,11 @@ class RuntimeProfile {
                                         const DerivedCounterFunction& counter_fn,
                                         const std::string& parent_counter_name);
 
+    ConditionCounter* add_conditition_counter(const std::string& name, TUnit::type type,
+                                              const ConditionCounterFunction& counter_fn,
+                                              const std::string& parent_counter_name,
+                                              int64_t level = 2);
+
     // Gets the counter object with 'name'.  Returns nullptr if there is no counter with
     // that name.
     Counter* get_counter(const std::string& name);
diff --git a/be/src/vec/exec/format/table/paimon_jni_reader.cpp b/be/src/vec/exec/format/table/paimon_jni_reader.cpp
index a05ea4511f47d8..15ece01b868fb0 100644
--- a/be/src/vec/exec/format/table/paimon_jni_reader.cpp
+++ b/be/src/vec/exec/format/table/paimon_jni_reader.cpp
@@ -79,8 +79,9 @@ PaimonJniReader::PaimonJniReader(const std::vector<SlotDescriptor*>& file_slot_d
             params[HADOOP_OPTION_PREFIX + kv.first] = kv.second;
         }
     }
+    int64_t self_split_weight = range.__isset.self_split_weight ? range.self_split_weight : -1;
     _jni_connector = std::make_unique<JniConnector>("org/apache/doris/paimon/PaimonJniScanner",
-                                                    params, column_names);
+                                                    params, column_names, self_split_weight);
 }
 
 Status PaimonJniReader::get_next_block(Block* block, size_t* read_rows, bool* eof) {
diff --git a/be/src/vec/exec/jni_connector.cpp b/be/src/vec/exec/jni_connector.cpp
index 4b5bb72e57bfbd..932e6e2772d4d8 100644
--- a/be/src/vec/exec/jni_connector.cpp
+++ b/be/src/vec/exec/jni_connector.cpp
@@ -73,7 +73,15 @@ Status JniConnector::open(RuntimeState* state, RuntimeProfile* profile) {
     ADD_TIMER(_profile, _connector_name.c_str());
     _open_scanner_time = ADD_CHILD_TIMER(_profile, "OpenScannerTime", _connector_name.c_str());
     _java_scan_time = ADD_CHILD_TIMER(_profile, "JavaScanTime", _connector_name.c_str());
+    _java_append_data_time =
+            ADD_CHILD_TIMER(_profile, "JavaAppendDataTime", _connector_name.c_str());
+    _java_create_vector_table_time =
+            ADD_CHILD_TIMER(_profile, "JavaCreateVectorTableTime", _connector_name.c_str());
     _fill_block_time = ADD_CHILD_TIMER(_profile, "FillBlockTime", _connector_name.c_str());
+    _max_time_split_weight_counter = _profile->add_conditition_counter(
+            "MaxTimeSplitWeight", TUnit::UNIT, [](int64_t _c, int64_t c) { return c > _c; },
+            _connector_name.c_str());
+    _java_scan_watcher = 0;
     // cannot put the env into fields, because frames in an env object is limited
     // to avoid limited frames in a thread, we should get local env in a method instead of in whole object.
     JNIEnv* env = nullptr;
@@ -82,7 +90,7 @@ Status JniConnector::open(RuntimeState* state, RuntimeProfile* profile) {
         batch_size = _state->batch_size();
     }
     RETURN_IF_ERROR(JniUtil::GetJNIEnv(&env));
-    SCOPED_TIMER(_open_scanner_time);
+    SCOPED_RAW_TIMER(&_jni_scanner_open_watcher);
     _scanner_params.emplace("time_zone", _state->timezone());
     RETURN_IF_ERROR(_init_jni_scanner(env, batch_size));
     // Call org.apache.doris.common.jni.JniScanner#open
@@ -114,7 +122,7 @@ Status JniConnector::get_next_block(Block* block, size_t* read_rows, bool* eof)
     RETURN_IF_ERROR(JniUtil::GetJNIEnv(&env));
     long meta_address = 0;
     {
-        SCOPED_TIMER(_java_scan_time);
+        SCOPED_RAW_TIMER(&_java_scan_watcher);
         meta_address = env->CallLongMethod(_jni_scanner_obj, _jni_scanner_get_next_batch);
     }
     RETURN_ERROR_IF_EXC(env);
@@ -171,6 +179,23 @@ Status JniConnector::close() {
         JNIEnv* env = nullptr;
         RETURN_IF_ERROR(JniUtil::GetJNIEnv(&env));
         if (_scanner_opened && _jni_scanner_obj != nullptr) {
+            COUNTER_UPDATE(_open_scanner_time, _jni_scanner_open_watcher);
+            COUNTER_UPDATE(_fill_block_time, _fill_block_watcher);
+
+            int64_t _append = (int64_t)env->CallLongMethod(_jni_scanner_obj,
+                                                           _jni_scanner_get_append_data_time);
+            COUNTER_UPDATE(_java_append_data_time, _append);
+
+            int64_t _create = (int64_t)env->CallLongMethod(
+                    _jni_scanner_obj, _jni_scanner_get_create_vector_table_time);
+            COUNTER_UPDATE(_java_create_vector_table_time, _create);
+
+            COUNTER_UPDATE(_java_scan_time, _java_scan_watcher - _append - _create);
+
+            _max_time_split_weight_counter->conditional_update(
+                    _jni_scanner_open_watcher + _fill_block_watcher + _java_scan_watcher,
+                    _self_split_weight);
+
             // _fill_block may be failed and returned, we should release table in close.
             // org.apache.doris.common.jni.JniScanner#releaseTable is idempotent
             env->CallVoidMethod(_jni_scanner_obj, _jni_scanner_release_table);
@@ -219,7 +244,15 @@ Status JniConnector::_init_jni_scanner(JNIEnv* env, int batch_size) {
     RETURN_ERROR_IF_EXC(env);
 
     _jni_scanner_open = env->GetMethodID(_jni_scanner_cls, "open", "()V");
+    RETURN_ERROR_IF_EXC(env);
     _jni_scanner_get_next_batch = env->GetMethodID(_jni_scanner_cls, "getNextBatchMeta", "()J");
+    RETURN_ERROR_IF_EXC(env);
+    _jni_scanner_get_append_data_time =
+            env->GetMethodID(_jni_scanner_cls, "getAppendDataTime", "()J");
+    RETURN_ERROR_IF_EXC(env);
+    _jni_scanner_get_create_vector_table_time =
+            env->GetMethodID(_jni_scanner_cls, "getCreateVectorTableTime", "()J");
+    RETURN_ERROR_IF_EXC(env);
     _jni_scanner_get_table_schema =
             env->GetMethodID(_jni_scanner_cls, "getTableSchema", "()Ljava/lang/String;");
     RETURN_ERROR_IF_EXC(env);
@@ -270,7 +303,7 @@ Status JniConnector::fill_block(Block* block, const ColumnNumbers& arguments, lo
 }
 
 Status JniConnector::_fill_block(Block* block, size_t num_rows) {
-    SCOPED_TIMER(_fill_block_time);
+    SCOPED_RAW_TIMER(&_fill_block_watcher);
     JNIEnv* env = nullptr;
     RETURN_IF_ERROR(JniUtil::GetJNIEnv(&env));
     for (int i = 0; i < _column_names.size(); ++i) {
diff --git a/be/src/vec/exec/jni_connector.h b/be/src/vec/exec/jni_connector.h
index 0c8d27efc02df1..d48fc3e0f537ef 100644
--- a/be/src/vec/exec/jni_connector.h
+++ b/be/src/vec/exec/jni_connector.h
@@ -187,10 +187,11 @@ class JniConnector : public ProfileCollector {
      * @param column_names Fields to read, also the required_fields in scanner_params
      */
     JniConnector(std::string connector_class, std::map<std::string, std::string> scanner_params,
-                 std::vector<std::string> column_names)
+                 std::vector<std::string> column_names, int64_t self_split_weight = -1)
             : _connector_class(std::move(connector_class)),
               _scanner_params(std::move(scanner_params)),
-              _column_names(std::move(column_names)) {
+              _column_names(std::move(column_names)),
+              _self_split_weight(self_split_weight) {
         // Use java class name as connector name
         _connector_name = split(_connector_class, "/").back();
     }
@@ -282,14 +283,22 @@ class JniConnector : public ProfileCollector {
     std::string _connector_class;
     std::map<std::string, std::string> _scanner_params;
     std::vector<std::string> _column_names;
+    int32_t _self_split_weight;
     bool _is_table_schema = false;
 
     RuntimeState* _state = nullptr;
     RuntimeProfile* _profile = nullptr;
     RuntimeProfile::Counter* _open_scanner_time = nullptr;
     RuntimeProfile::Counter* _java_scan_time = nullptr;
+    RuntimeProfile::Counter* _java_append_data_time = nullptr;
+    RuntimeProfile::Counter* _java_create_vector_table_time = nullptr;
     RuntimeProfile::Counter* _fill_block_time = nullptr;
     std::map<std::string, RuntimeProfile::Counter*> _scanner_profile;
+    RuntimeProfile::ConditionCounter* _max_time_split_weight_counter = nullptr;
+
+    int64_t _jni_scanner_open_watcher = 0;
+    int64_t _java_scan_watcher = 0;
+    int64_t _fill_block_watcher = 0;
 
     size_t _has_read = 0;
 
@@ -298,6 +307,8 @@ class JniConnector : public ProfileCollector {
     jclass _jni_scanner_cls;
     jobject _jni_scanner_obj;
     jmethodID _jni_scanner_open;
+    jmethodID _jni_scanner_get_append_data_time;
+    jmethodID _jni_scanner_get_create_vector_table_time;
     jmethodID _jni_scanner_get_next_batch;
     jmethodID _jni_scanner_get_table_schema;
     jmethodID _jni_scanner_close;
diff --git a/be/test/util/runtime_profile_counter_tree_node_test.cpp b/be/test/util/runtime_profile_counter_tree_node_test.cpp
index 5226841b4dd9e1..9001dac5de8292 100644
--- a/be/test/util/runtime_profile_counter_tree_node_test.cpp
+++ b/be/test/util/runtime_profile_counter_tree_node_test.cpp
@@ -345,4 +345,27 @@ TEST_F(RuntimeProfileCounterTreeNodeTest, DescriptionCounter) {
     ASSERT_EQ(*child_counter_map["root"].begin(), "description_entry");
 }
 
+TEST_F(RuntimeProfileCounterTreeNodeTest, ConditionCounterTest) {
+    auto min_counter = std::make_unique<RuntimeProfile::ConditionCounter>(
+            TUnit::UNIT, [](int64_t _c, int64_t c) { return c < _c; }, 100000, 1000000);
+
+    min_counter->conditional_update(100, 1);
+    ASSERT_EQ(min_counter->value(), 1);
+    min_counter->conditional_update(200, 2);
+    ASSERT_EQ(min_counter->value(), 1);
+    min_counter->conditional_update(10, 3);
+    ASSERT_EQ(min_counter->value(), 3);
+
+    auto max_counter = std::make_unique<RuntimeProfile::ConditionCounter>(
+            TUnit::UNIT, [](int64_t _c, int64_t c) { return c > _c; });
+
+    max_counter->conditional_update(10, 4);
+    ASSERT_EQ(max_counter->value(), 4);
+    max_counter->conditional_update(1, 5);
+    ASSERT_EQ(max_counter->value(), 4);
+    max_counter->conditional_update(100, 6);
+    ASSERT_EQ(max_counter->value(), 6);
+    max_counter->conditional_update(10, 7);
+    ASSERT_EQ(max_counter->value(), 6);
+}
 } // namespace doris
\ No newline at end of file
diff --git a/fe/be-java-extensions/java-common/src/main/java/org/apache/doris/common/jni/JniScanner.java b/fe/be-java-extensions/java-common/src/main/java/org/apache/doris/common/jni/JniScanner.java
index cb191f4b038f48..8bb8a664ccf516 100644
--- a/fe/be-java-extensions/java-common/src/main/java/org/apache/doris/common/jni/JniScanner.java
+++ b/fe/be-java-extensions/java-common/src/main/java/org/apache/doris/common/jni/JniScanner.java
@@ -43,6 +43,8 @@ public abstract class JniScanner {
     // to deserialize the predicate string to PaimonPredicate object.
     protected ScanPredicate[] predicates;
     protected int batchSize;
+    protected long appendDataTime = 0;
+    protected long createVectorTableTime = 0;
 
     // Initialize JniScanner
     public abstract void open() throws IOException;
@@ -87,7 +89,9 @@ public String getTableSchema() throws IOException {
 
     public long getNextBatchMeta() throws IOException {
         if (vectorTable == null) {
+            long l = System.nanoTime();
             vectorTable = VectorTable.createWritableTable(types, fields, batchSize);
+            createVectorTableTime += System.nanoTime() - l;
         }
         int numRows;
         try {
@@ -133,4 +137,12 @@ public void releaseTable() {
         }
         vectorTable = null;
     }
+
+    public long getAppendDataTime() {
+        return appendDataTime;
+    }
+
+    public long getCreateVectorTableTime() {
+        return createVectorTableTime;
+    }
 }
diff --git a/fe/be-java-extensions/paimon-scanner/src/main/java/org/apache/doris/paimon/PaimonJniScanner.java b/fe/be-java-extensions/paimon-scanner/src/main/java/org/apache/doris/paimon/PaimonJniScanner.java
index e6c04a0a2f72b8..6ba4578dc6ec10 100644
--- a/fe/be-java-extensions/paimon-scanner/src/main/java/org/apache/doris/paimon/PaimonJniScanner.java
+++ b/fe/be-java-extensions/paimon-scanner/src/main/java/org/apache/doris/paimon/PaimonJniScanner.java
@@ -204,7 +204,9 @@ private int readAndProcessNextBatch() throws IOException {
                     columnValue.setOffsetRow(record);
                     for (int i = 0; i < fields.length; i++) {
                         columnValue.setIdx(i, types[i], paimonDataTypeList.get(i));
+                        long l = System.nanoTime();
                         appendData(i, columnValue);
+                        appendDataTime += System.nanoTime() - l;
                     }
                     rows++;
                     if (rows >= batchSize) {
diff --git a/fe/fe-core/src/main/java/org/apache/doris/common/profile/Profile.java b/fe/fe-core/src/main/java/org/apache/doris/common/profile/Profile.java
index 4ef5b3e897fad2..734f0268471b87 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/common/profile/Profile.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/common/profile/Profile.java
@@ -316,6 +316,7 @@ public synchronized void updateSummary(Map<String, String> summaryInfo, boolean
                     }
                     return;
                 }
+                summaryProfile.queryFinished();
             }
 
             // Nereids native insert not set planner, so it is null
diff --git a/fe/fe-core/src/main/java/org/apache/doris/common/profile/SummaryProfile.java b/fe/fe-core/src/main/java/org/apache/doris/common/profile/SummaryProfile.java
index 7215b8a9c65889..d0416ba5f6d26b 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/common/profile/SummaryProfile.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/common/profile/SummaryProfile.java
@@ -21,6 +21,7 @@
 import org.apache.doris.common.io.Text;
 import org.apache.doris.common.util.TimeUtils;
 import org.apache.doris.persist.gson.GsonUtils;
+import org.apache.doris.system.Backend;
 import org.apache.doris.thrift.TNetworkAddress;
 import org.apache.doris.thrift.TUnit;
 import org.apache.doris.transaction.TransactionType;
@@ -30,14 +31,18 @@
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.Maps;
 import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
 import com.google.gson.annotations.SerializedName;
 
 import java.io.DataInput;
 import java.io.DataOutput;
 import java.io.IOException;
 import java.util.HashMap;
+import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Map.Entry;
+import java.util.stream.Collectors;
 
 /**
  * SummaryProfile is part of a query profile.
@@ -122,6 +127,7 @@ public class SummaryProfile {
     public static final String RPC_QUEUE_TIME = "RPC Work Queue Time";
     public static final String RPC_WORK_TIME = "RPC Work Time";
     public static final String LATENCY_FROM_BE_TO_FE = "RPC Latency From BE To FE";
+    public static final String SPLITS_ASSIGNMENT_WEIGHT = "Splits Assignment Weight";
 
     // These info will display on FE's web ui table, every one will be displayed as
     // a column, so that should not
@@ -179,7 +185,10 @@ public class SummaryProfile {
             TRACE_ID,
             TRANSACTION_COMMIT_TIME,
             SYSTEM_MESSAGE,
-            EXECUTED_BY_FRONTEND
+            EXECUTED_BY_FRONTEND,
+            NEREIDS_BE_FOLD_CONST_TIME,
+            NEREIDS_GARBAGE_COLLECT_TIME,
+            SPLITS_ASSIGNMENT_WEIGHT
     );
 
     // Ident of each item. Default is 0, which doesn't need to present in this Map.
@@ -340,6 +349,8 @@ public class SummaryProfile {
     private Map<TNetworkAddress, List<Long>> rpcPhase1Latency;
     private Map<TNetworkAddress, List<Long>> rpcPhase2Latency;
 
+    private Map<Backend, Long> assignedWeightPerBackend;
+
     public SummaryProfile() {
         init();
     }
@@ -399,6 +410,24 @@ public void update(Map<String, String> summaryInfo) {
         updateExecutionSummaryProfile();
     }
 
+    // This method is used to display the final data status when the overall query ends.
+    // This can avoid recalculating some strings and so on every time during the update process.
+    public void queryFinished() {
+        if (assignedWeightPerBackend != null) {
+            Map<String, Long> m = assignedWeightPerBackend.entrySet().stream()
+                    .sorted(Map.Entry.comparingByValue())
+                    .collect(Collectors.toMap(
+                        entry -> entry.getKey().getAddress(),
+                        Entry::getValue,
+                        (v1, v2) -> v1,
+                        LinkedHashMap::new
+                ));
+            executionSummaryProfile.addInfoString(
+                    SPLITS_ASSIGNMENT_WEIGHT,
+                    new GsonBuilder().create().toJson(m));
+        }
+    }
+
     private void updateSummaryProfile(Map<String, String> infos) {
         for (String key : infos.keySet()) {
             if (SUMMARY_KEYS.contains(key)) {
@@ -951,4 +980,8 @@ public void setExecutedByFrontend(boolean executedByFrontend) {
     public void write(DataOutput output) throws IOException {
         Text.writeString(output, GsonUtils.GSON.toJson(this));
     }
+
+    public void setAssignedWeightPerBackend(Map<Backend, Long> assignedWeightPerBackend) {
+        this.assignedWeightPerBackend = assignedWeightPerBackend;
+    }
 }
diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/FileQueryScanNode.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/FileQueryScanNode.java
index 14c82c1606eb52..c3351600fc6e2f 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/datasource/FileQueryScanNode.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/FileQueryScanNode.java
@@ -40,6 +40,7 @@
 import org.apache.doris.planner.PlanNodeId;
 import org.apache.doris.qe.ConnectContext;
 import org.apache.doris.qe.SessionVariable;
+import org.apache.doris.qe.StmtExecutor;
 import org.apache.doris.spi.Split;
 import org.apache.doris.statistics.StatisticalType;
 import org.apache.doris.system.Backend;
@@ -275,8 +276,9 @@ protected Optional<String> getSerializedTable() {
     @Override
     public void createScanRangeLocations() throws UserException {
         long start = System.currentTimeMillis();
-        if (ConnectContext.get().getExecutor() != null) {
-            ConnectContext.get().getExecutor().getSummaryProfile().setGetSplitsStartTime();
+        StmtExecutor executor = ConnectContext.get().getExecutor();
+        if (executor != null) {
+            executor.getSummaryProfile().setGetSplitsStartTime();
         }
         TFileFormatType fileFormatType = getFileFormatType();
         if (fileFormatType == TFileFormatType.FORMAT_ORC) {
@@ -327,8 +329,8 @@ public void createScanRangeLocations() throws UserException {
             splitAssignment = new SplitAssignment(
                     backendPolicy, this, this::splitToScanRange, locationProperties, pathPartitionKeys);
             splitAssignment.init();
-            if (ConnectContext.get().getExecutor() != null) {
-                ConnectContext.get().getExecutor().getSummaryProfile().setGetSplitsFinishTime();
+            if (executor != null) {
+                executor.getSummaryProfile().setGetSplitsFinishTime();
             }
             if (splitAssignment.getSampleSplit() == null && !isFileStreamType()) {
                 return;
@@ -388,8 +390,11 @@ public void createScanRangeLocations() throws UserException {
 
         getSerializedTable().ifPresent(params::setSerializedTable);
 
-        if (ConnectContext.get().getExecutor() != null) {
-            ConnectContext.get().getExecutor().getSummaryProfile().setCreateScanRangeFinishTime();
+        if (executor != null) {
+            executor.getSummaryProfile().setCreateScanRangeFinishTime();
+            if (sessionVariable.showSplitProfileInfo()) {
+                executor.getSummaryProfile().setAssignedWeightPerBackend(backendPolicy.getAssignedWeightPerBackend());
+            }
         }
         if (LOG.isDebugEnabled()) {
             LOG.debug("create #{} ScanRangeLocations cost: {} ms",
diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/FileSplit.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/FileSplit.java
index 37e66c7056fbd7..da1e36c7e87459 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/datasource/FileSplit.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/FileSplit.java
@@ -111,4 +111,8 @@ public SplitWeight getSplitWeight() {
             return SplitWeight.standard();
         }
     }
+
+    public long getSelfSplitWeight() {
+        return selfSplitWeight;
+    }
 }
diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/paimon/source/PaimonScanNode.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/paimon/source/PaimonScanNode.java
index a8d9c0c42e5173..63423bd630d597 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/datasource/paimon/source/PaimonScanNode.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/paimon/source/PaimonScanNode.java
@@ -180,6 +180,7 @@ private void setPaimonParams(TFileRangeDesc rangeDesc, PaimonSplit paimonSplit)
             // use jni reader
             rangeDesc.setFormatType(TFileFormatType.FORMAT_JNI);
             fileDesc.setPaimonSplit(encodeObjectToString(split));
+            rangeDesc.setSelfSplitWeight(paimonSplit.getSelfSplitWeight());
         } else {
             // use native reader
             if (fileFormat.equals("orc")) {
diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java b/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java
index dade95aac177cf..80a4bbee8e1afe 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java
@@ -4779,4 +4779,8 @@ public boolean getEnableLocalMergeSort() {
     public boolean getEnableExternalTableBatchMode() {
         return enableExternalTableBatchMode;
     }
+
+    public boolean showSplitProfileInfo() {
+        return enableProfile() && getProfileLevel() > 1;
+    }
 }
diff --git a/fe/fe-core/src/main/java/org/apache/doris/spi/Split.java b/fe/fe-core/src/main/java/org/apache/doris/spi/Split.java
index 412e4b6792f69a..1212841d0290e6 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/spi/Split.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/spi/Split.java
@@ -53,4 +53,6 @@ default String getConsistentHashString() {
     }
 
     void setTargetSplitSize(Long targetSplitSize);
+
+    long getSelfSplitWeight();
 }
diff --git a/gensrc/thrift/PlanNodes.thrift b/gensrc/thrift/PlanNodes.thrift
index 3165a6ac764db4..ea5da932fa6909 100644
--- a/gensrc/thrift/PlanNodes.thrift
+++ b/gensrc/thrift/PlanNodes.thrift
@@ -482,6 +482,7 @@ struct TFileRangeDesc {
     // so fs_name should be with TFileRangeDesc
     12: optional string fs_name
     13: optional TFileFormatType format_type;
+    14: optional i64 self_split_weight
 }
 
 struct TSplitSource {


Reviews:
user: login: copilot-pull-request-reviewer[bot]
body: ## Pull Request Overview

This PR enhances the observability of split operations and JNI profiling by adding more detailed split numbering and timing measurements. Key updates include:
- Adding new methods to convert splits into assignment information with profiling details.
- Propagating a session variable to control whether split profile info is shown and incorporating split ID and weight reporting.
- Extending JNI scanning to record append data and vector table creation times.

### Reviewed Changes

Copilot reviewed 18 out of 21 changed files in this pull request and generated 2 comments.

<details>
<summary>Show a summary per file</summary>

| File | Description |
| ---- | ----------- |
| fe/fe-core/src/main/java/org/apache/doris/spi/Split.java | Added default method to convert a split into assignment info. |
| fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java | Introduced a new method to check if split profile info should be shown. |
| fe/fe-core/src/main/java/org/apache/doris/datasource/paimon/source/PaimonSplit.java | Updated to implement the new assignment conversion interface. |
| fe/fe-core/src/main/java/org/apache/doris/datasource/paimon/source/PaimonScanNode.java | Revised file splitting logic with a new variable and setTargetSplitSize call; updated comments. |
| fe/fe-core/src/main/java/org/apache/doris/datasource/SplitSource.java | Modified to accept session variable and process split profile info when available. |
| fe/fe-core/src/main/java/org/apache/doris/datasource/SplitAssignment.java | Adjusted to use the new assignment split info interface and added a thread-safe split ID generator. |
| fe/fe-core/src/main/java/org/apache/doris/datasource/FileQueryScanNode.java | Modified to integrate split profile info handling while building scan range locations. |
| Additional files | New classes and interfaces (e.g. SplitProfileInfo, SplitId, AssignmentWithSplitInfo, etc.) to support profiling data, plus JNI timing info additions in JNI scanner modules. |
</details>


<details>
<summary>Files not reviewed (3)</summary>

* **be/src/vec/exec/format/table/paimon_jni_reader.cpp**: Language not supported
* **be/src/vec/exec/jni_connector.cpp**: Language not supported
* **be/src/vec/exec/jni_connector.h**: Language not supported
</details>



state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-31T08:54:14Z
user: login: zhiqiang-hhhh
state: CHANGES_REQUESTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-06T06:48:20Z
user: login: zhiqiang-hhhh
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-07T03:18:29Z
user: login: zhiqiang-hhhh
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-07T03:19:45Z
user: login: morningman
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-10T04:59:30Z
user: login: wuwenchi
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-11T05:00:34Z
user: login: morningman
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-15T21:56:26Z
user: login: zhiqiang-hhhh
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-21T02:16:45Z
user: login: zhiqiang-hhhh
body: LGTM
state: APPROVED
author_association: CONTRIBUTOR
submitted_at: 2025-04-23T06:12:13Z
user: login: morningman
body: LGTM
state: APPROVED
author_association: CONTRIBUTOR
submitted_at: 2025-04-23T06:14:05Z

Review comments:
diff_hunk: @@ -276,6 +276,9 @@ public List<Split> getSplits(int numBackends) throws UserException {
         boolean applyCountPushdown = getPushDownAggNoGroupingOp() == TPushAggOp.COUNT;
         // Just for counting the number of selected partitions for this paimon table
         Set<BinaryRow> selectedPartitionValues = Sets.newHashSet();
+        // if applyCountPushdown is true, we can't to split the file
+        // becasue the raw file and deletion vector is one-to-one mapping
path: fe/fe-core/src/main/java/org/apache/doris/datasource/paimon/source/PaimonScanNode.java
user: login: Copilot
body: [nitpick] In the comment, consider replacing 'can't to split' with 'cannot split' for improved clarity.
```suggestion
        // if applyCountPushdown is true, we cannot split the file
        // because the raw file and deletion vector is one-to-one mapping
```
created_at: 2025-03-31T08:54:13Z
author_association: CONTRIBUTOR
diff_hunk: @@ -276,6 +276,9 @@ public List<Split> getSplits(int numBackends) throws UserException {
         boolean applyCountPushdown = getPushDownAggNoGroupingOp() == TPushAggOp.COUNT;
         // Just for counting the number of selected partitions for this paimon table
         Set<BinaryRow> selectedPartitionValues = Sets.newHashSet();
+        // if applyCountPushdown is true, we can't to split the file
+        // becasue the raw file and deletion vector is one-to-one mapping
path: fe/fe-core/src/main/java/org/apache/doris/datasource/paimon/source/PaimonScanNode.java
user: login: Copilot
body: [nitpick] Typo in comment: 'becasue' should be corrected to 'because'.
```suggestion
        // because the raw file and deletion vector is one-to-one mapping
```
created_at: 2025-03-31T08:54:13Z
author_association: CONTRIBUTOR
diff_hunk: @@ -70,10 +70,15 @@ namespace doris::vectorized {
 Status JniConnector::open(RuntimeState* state, RuntimeProfile* profile) {
     _state = state;
     _profile = profile;
-    ADD_TIMER(_profile, _connector_name.c_str());
-    _open_scanner_time = ADD_CHILD_TIMER(_profile, "OpenScannerTime", _connector_name.c_str());
-    _java_scan_time = ADD_CHILD_TIMER(_profile, "JavaScanTime", _connector_name.c_str());
-    _fill_block_time = ADD_CHILD_TIMER(_profile, "FillBlockTime", _connector_name.c_str());
+    ADD_TIMER_WITH_LEVEL(_profile, _connector_name.c_str(), 1);
path: be/src/vec/exec/jni_connector.cpp
user: login: zhiqiang-hhhh
body: do not change counter level
created_at: 2025-04-06T06:28:35Z
author_association: CONTRIBUTOR
diff_hunk: @@ -82,12 +87,15 @@ Status JniConnector::open(RuntimeState* state, RuntimeProfile* profile) {
         batch_size = _state->batch_size();
     }
     RETURN_IF_ERROR(JniUtil::GetJNIEnv(&env));
-    SCOPED_TIMER(_open_scanner_time);
+    MonotonicStopWatch _watch;
+    _watch.start();
     _scanner_params.emplace("time_zone", _state->timezone());
     RETURN_IF_ERROR(_init_jni_scanner(env, batch_size));
     // Call org.apache.doris.common.jni.JniScanner#open
     env->CallVoidMethod(_jni_scanner_obj, _jni_scanner_open);
     RETURN_ERROR_IF_EXC(env);
+    _watch.stop();
path: be/src/vec/exec/jni_connector.cpp
user: login: zhiqiang-hhhh
body: what if `open` returned before this line
created_at: 2025-04-06T06:30:48Z
author_association: CONTRIBUTOR
diff_hunk: @@ -113,11 +121,16 @@ Status JniConnector::get_next_block(Block* block, size_t* read_rows, bool* eof)
     JNIEnv* env = nullptr;
     RETURN_IF_ERROR(JniUtil::GetJNIEnv(&env));
     long meta_address = 0;
-    {
-        SCOPED_TIMER(_java_scan_time);
-        meta_address = env->CallLongMethod(_jni_scanner_obj, _jni_scanner_get_next_batch);
-    }
+
+    MonotonicStopWatch _watch;
+    _watch.start();
+    meta_address = env->CallLongMethod(_jni_scanner_obj, _jni_scanner_get_next_batch);
     RETURN_ERROR_IF_EXC(env);
+    _watch.stop();
+    _java_scan_watcher += _watch.elapsed_time();
+    LOG(INFO) << "mmc "
path: be/src/vec/exec/jni_connector.cpp
user: login: zhiqiang-hhhh
body: Should not be a INFO log
created_at: 2025-04-06T06:31:18Z
author_association: CONTRIBUTOR
diff_hunk: @@ -113,11 +121,16 @@ Status JniConnector::get_next_block(Block* block, size_t* read_rows, bool* eof)
     JNIEnv* env = nullptr;
     RETURN_IF_ERROR(JniUtil::GetJNIEnv(&env));
     long meta_address = 0;
-    {
-        SCOPED_TIMER(_java_scan_time);
-        meta_address = env->CallLongMethod(_jni_scanner_obj, _jni_scanner_get_next_batch);
-    }
+
+    MonotonicStopWatch _watch;
+    _watch.start();
+    meta_address = env->CallLongMethod(_jni_scanner_obj, _jni_scanner_get_next_batch);
     RETURN_ERROR_IF_EXC(env);
+    _watch.stop();
path: be/src/vec/exec/jni_connector.cpp
user: login: zhiqiang-hhhh
body: what if returned at line 128
created_at: 2025-04-06T06:31:32Z
author_association: CONTRIBUTOR
diff_hunk: @@ -278,6 +278,39 @@ class RuntimeProfile {
         DerivedCounterFunction _counter_fn;
     };
 
+    using ConditionCounterFunction = std::function<bool(int64_t, int64_t)>;
+
+    class ConditionCounter : public Counter {
path: be/src/util/runtime_profile.h
user: login: zhiqiang-hhhh
body: add comment to explain the usage
created_at: 2025-04-06T06:41:29Z
author_association: CONTRIBUTOR
diff_hunk: @@ -295,6 +295,7 @@ public synchronized void updateSummary(Map<String, String> summaryInfo, boolean
                     }
                     return;
                 }
+                summaryProfile.queryFinished();
path: fe/fe-core/src/main/java/org/apache/doris/common/profile/Profile.java
user: login: zhiqiang-hhhh
body: why adding this line?
created_at: 2025-04-06T06:46:04Z
author_association: CONTRIBUTOR
diff_hunk: @@ -179,7 +185,12 @@ public class SummaryProfile {
             TRACE_ID,
             TRANSACTION_COMMIT_TIME,
             SYSTEM_MESSAGE,
-            EXECUTED_BY_FRONTEND
+            EXECUTED_BY_FRONTEND,
+            NEREIDS_BE_FOLD_CONST_TIME,
path: fe/fe-core/src/main/java/org/apache/doris/common/profile/SummaryProfile.java
user: login: zhiqiang-hhhh
body: why need this
created_at: 2025-04-06T06:46:36Z
author_association: CONTRIBUTOR
diff_hunk: @@ -278,6 +278,39 @@ class RuntimeProfile {
         DerivedCounterFunction _counter_fn;
     };
 
+    using ConditionCounterFunction = std::function<bool(int64_t, int64_t)>;
+
+    class ConditionCounter : public Counter {
+    public:
+        ConditionCounter(TUnit::type type, 
+                         const ConditionCounterFunction& condition_func,
+                         int64_t condition = 0,
+                         int64_t value = 0, 
+                         int64_t level = 2)
+            : Counter(type, value, level), 
+              _condition(condition),
+              _value(value),
+              _condition_func(condition_func) {}
+
+        virtual Counter* clone() const override {
+            return new ConditionCounter(type(), _condition_func, _condition, value(), level());
+        }
+
+        virtual int64_t value() const override { return _value; }
+
+        void conditional_update(int64_t c, int64_t v) {
+            if (_condition_func(_condition, c)) {
+                _value = v;
+                _condition = c;
+            }
+        }
+
+    private:
path: be/src/util/runtime_profile.h
user: login: zhiqiang-hhhh
body: std::mutex _mutex;
created_at: 2025-04-07T03:18:29Z
author_association: CONTRIBUTOR
diff_hunk: @@ -278,6 +278,39 @@ class RuntimeProfile {
         DerivedCounterFunction _counter_fn;
     };
 
+    using ConditionCounterFunction = std::function<bool(int64_t, int64_t)>;
+
+    class ConditionCounter : public Counter {
+    public:
+        ConditionCounter(TUnit::type type, 
+                         const ConditionCounterFunction& condition_func,
+                         int64_t condition = 0,
+                         int64_t value = 0, 
+                         int64_t level = 2)
+            : Counter(type, value, level), 
+              _condition(condition),
+              _value(value),
+              _condition_func(condition_func) {}
+
+        virtual Counter* clone() const override {
+            return new ConditionCounter(type(), _condition_func, _condition, value(), level());
+        }
+
+        virtual int64_t value() const override { return _value; }
path: be/src/util/runtime_profile.h
user: login: zhiqiang-hhhh
body: `std::lock_guard<std::mutex> l(_mutex);`
created_at: 2025-04-07T03:19:45Z
author_association: CONTRIBUTOR
diff_hunk: @@ -82,12 +90,15 @@ Status JniConnector::open(RuntimeState* state, RuntimeProfile* profile) {
         batch_size = _state->batch_size();
     }
     RETURN_IF_ERROR(JniUtil::GetJNIEnv(&env));
-    SCOPED_TIMER(_open_scanner_time);
+    MonotonicStopWatch _watch;
path: be/src/vec/exec/jni_connector.cpp
user: login: morningman
body: use MACRO, like this: `SCOPED_RAW_TIMER(&_statistics.decode_dict_time);`
created_at: 2025-04-10T04:50:30Z
author_association: CONTRIBUTOR
diff_hunk: @@ -82,12 +90,15 @@ Status JniConnector::open(RuntimeState* state, RuntimeProfile* profile) {
         batch_size = _state->batch_size();
     }
     RETURN_IF_ERROR(JniUtil::GetJNIEnv(&env));
-    SCOPED_TIMER(_open_scanner_time);
+    MonotonicStopWatch _watch;
path: be/src/vec/exec/jni_connector.cpp
user: login: morningman
body: same suggestion for others
created_at: 2025-04-10T04:50:42Z
author_association: CONTRIBUTOR
diff_hunk: @@ -399,6 +415,15 @@ public void update(Map<String, String> summaryInfo) {
         updateExecutionSummaryProfile();
     }
 
+    public void queryFinished() {
+        executionSummaryProfile.addInfoString(
+                SPLITS_ASSIGNMENT_WEIGHT,
+                new GsonBuilder().disableHtmlEscaping().create().toJson(splitWeightProfileInfoMap));
+        executionSummaryProfile.addInfoString(
+                SPLITS_ASSIGNMENT_SPLIT_INFO,
+                new GsonBuilder().disableHtmlEscaping().create().toJson(splitProfileInfoMap));
path: fe/fe-core/src/main/java/org/apache/doris/common/profile/SummaryProfile.java
user: login: morningman
body: The number of split may be huge. It is not a good idea to print them all.
I think we can only print top 10 of them.
And also need to consider and, we'd even not save all split. Just save top 10 is enough
created_at: 2025-04-10T04:57:50Z
author_association: CONTRIBUTOR
diff_hunk: @@ -399,6 +415,15 @@ public void update(Map<String, String> summaryInfo) {
         updateExecutionSummaryProfile();
     }
 
+    public void queryFinished() {
+        executionSummaryProfile.addInfoString(
+                SPLITS_ASSIGNMENT_WEIGHT,
+                new GsonBuilder().disableHtmlEscaping().create().toJson(splitWeightProfileInfoMap));
+        executionSummaryProfile.addInfoString(
+                SPLITS_ASSIGNMENT_SPLIT_INFO,
+                new GsonBuilder().disableHtmlEscaping().create().toJson(splitProfileInfoMap));
path: fe/fe-core/src/main/java/org/apache/doris/common/profile/SummaryProfile.java
user: login: wuwenchi
body: Here, we don't yet know which split has the longest execution time on the BE (Backend Engine) in the end, so we can't calculate the top ones here.
created_at: 2025-04-11T05:00:34Z
author_association: CONTRIBUTOR
diff_hunk: @@ -340,6 +349,8 @@ public class SummaryProfile {
     private Map<TNetworkAddress, List<Long>> rpcPhase1Latency;
     private Map<TNetworkAddress, List<Long>> rpcPhase2Latency;
 
+    Map<Backend, Long> assignedWeightPerBackend;
path: fe/fe-core/src/main/java/org/apache/doris/common/profile/SummaryProfile.java
user: login: morningman
body: ```suggestion
    private Map<Backend, Long> assignedWeightPerBackend;
```
created_at: 2025-04-15T21:50:08Z
author_association: CONTRIBUTOR
diff_hunk: @@ -399,6 +410,22 @@ public void update(Map<String, String> summaryInfo) {
         updateExecutionSummaryProfile();
     }
 
+    public void queryFinished() {
path: fe/fe-core/src/main/java/org/apache/doris/common/profile/SummaryProfile.java
user: login: morningman
body: Add comment to explain what is this method for and why we need this
created_at: 2025-04-15T21:50:26Z
author_association: CONTRIBUTOR
diff_hunk: @@ -344,6 +346,8 @@ public List<Split> getSplits(int numBackends) throws UserException {
             splitStats.add(splitStat);
         }
 
+        splits.forEach(s -> s.setTargetSplitSize(realFileSplitSize));
path: fe/fe-core/src/main/java/org/apache/doris/datasource/paimon/source/PaimonScanNode.java
user: login: morningman
body: Is this a bug?
created_at: 2025-04-15T21:52:36Z
author_association: CONTRIBUTOR
diff_hunk: @@ -473,6 +473,24 @@ void RuntimeProfile::add_description(const std::string& name, const std::string&
     child_counters->insert(name);
 }
 
+RuntimeProfile::ConditionCounter* RuntimeProfile::add_conditition_counter(
+        const std::string& name, TUnit::type type, const ConditionCounterFunction& counter_fn,
+        const std::string& parent_counter_name) {
+    std::lock_guard<std::mutex> l(_counter_map_lock);
+
+    if (_counter_map.find(name) != _counter_map.end()) {
+        DCHECK(dynamic_cast<ConditionCounter*>(_counter_map[name]));
path: be/src/util/runtime_profile.cpp
user: login: zhiqiang-hhhh
body: 把dcheck去掉，保存dynamic_cast的结果，检查是否为空指针，如果为空，那么就抛异常
created_at: 2025-04-21T02:14:03Z
author_association: CONTRIBUTOR
diff_hunk: @@ -473,6 +473,24 @@ void RuntimeProfile::add_description(const std::string& name, const std::string&
     child_counters->insert(name);
 }
 
+RuntimeProfile::ConditionCounter* RuntimeProfile::add_conditition_counter(
+        const std::string& name, TUnit::type type, const ConditionCounterFunction& counter_fn,
+        const std::string& parent_counter_name) {
path: be/src/util/runtime_profile.cpp
user: login: zhiqiang-hhhh
body: 没有counter_level参数
created_at: 2025-04-21T02:14:24Z
author_association: CONTRIBUTOR
diff_hunk: @@ -278,6 +278,47 @@ class RuntimeProfile {
         DerivedCounterFunction _counter_fn;
     };
 
+    using ConditionCounterFunction = std::function<bool(int64_t, int64_t)>;
+
+    // ConditionCounter is a specialized counter that only updates its value when a specific condition is met.
+    // It uses a condition function (condition_func) to determine when the counter's value should be updated.
+    // This type of counter is particularly useful for tracking maximum values, minimum values, or other metrics
+    // that should only be updated when they meet certain criteria.
+    // For example, it can be used to record the maximum value of a specific metric during query execution,
+    // or to update the counter only when a new value exceeds some threshold.
+    class ConditionCounter : public Counter {
+    public:
+        ConditionCounter(TUnit::type type, const ConditionCounterFunction& condition_func,
+                         int64_t condition = 0, int64_t value = 0, int64_t level = 2)
+                : Counter(type, value, level),
+                  _condition(condition),
+                  _value(value),
+                  _condition_func(condition_func) {}
+
+        virtual Counter* clone() const override {
path: be/src/util/runtime_profile.h
user: login: zhiqiang-hhhh
body: virtual 去掉，需要加锁
created_at: 2025-04-21T02:15:27Z
author_association: CONTRIBUTOR
diff_hunk: @@ -278,6 +278,47 @@ class RuntimeProfile {
         DerivedCounterFunction _counter_fn;
     };
 
+    using ConditionCounterFunction = std::function<bool(int64_t, int64_t)>;
+
+    // ConditionCounter is a specialized counter that only updates its value when a specific condition is met.
+    // It uses a condition function (condition_func) to determine when the counter's value should be updated.
+    // This type of counter is particularly useful for tracking maximum values, minimum values, or other metrics
+    // that should only be updated when they meet certain criteria.
+    // For example, it can be used to record the maximum value of a specific metric during query execution,
+    // or to update the counter only when a new value exceeds some threshold.
+    class ConditionCounter : public Counter {
+    public:
+        ConditionCounter(TUnit::type type, const ConditionCounterFunction& condition_func,
+                         int64_t condition = 0, int64_t value = 0, int64_t level = 2)
+                : Counter(type, value, level),
+                  _condition(condition),
+                  _value(value),
+                  _condition_func(condition_func) {}
+
+        virtual Counter* clone() const override {
+            return new ConditionCounter(type(), _condition_func, _condition, value(), level());
+        }
+
+        virtual int64_t value() const override {
path: be/src/util/runtime_profile.h
user: login: zhiqiang-hhhh
body: virtual 去掉
created_at: 2025-04-21T02:15:36Z
author_association: CONTRIBUTOR

PR comments:
user: login: Thearas
created_at: 2025-03-31T07:23:24Z
body: 
Thank you for your contribution to Apache Doris.
Don't know what should be done next? See [How to process your PR](https://cwiki.apache.org/confluence/display/DORIS/How+to+process+your+PR).

Please clearly describe your PR:
1. What problem was fixed (it's best to include specific error reporting information). How it was fixed.
2. Which behaviors were modified. What was the previous behavior, what is it now, why was it modified, and what possible impacts might there be.
3. What features were added. Why was this function added?
4. Which code was refactored and why was this part of the code refactored?
5. Which functions were optimized and what is the difference before and after the optimization?
    
author_association: CONTRIBUTOR
user: login: wuwenchi
created_at: 2025-04-06T05:17:42Z
body: run buildall
author_association: CONTRIBUTOR
user: login: doris-robot
created_at: 2025-04-06T05:41:09Z
body: TeamCity cloud ut coverage result:
 Function Coverage: 83.07% (1089/1311) 
 Line Coverage: 66.08% (18165/27488)
 Region Coverage: 65.52% (8948/13657)
 Branch Coverage: 55.36% (4821/8708)
 Coverage Report: http://coverage.selectdb-in.cc/coverage/29a330ffef20ee4b032cc8e080557af6941a6bcb_29a330ffef20ee4b032cc8e080557af6941a6bcb_cloud/report/index.html
author_association: NONE
user: login: doris-robot
created_at: 2025-04-06T09:25:06Z
body: # BE UT Coverage Report
Increment line coverage `11.43% (8/70)` :tada:

[Increment coverage report](http://coverage.selectdb-in.cc/coverage/29a330ffef20ee4b032cc8e080557af6941a6bcb_29a330ffef20ee4b032cc8e080557af6941a6bcb/increment_report/index.html)
[Complete coverage report](http://coverage.selectdb-in.cc/coverage/29a330ffef20ee4b032cc8e080557af6941a6bcb_29a330ffef20ee4b032cc8e080557af6941a6bcb/report/index.html)
| Category          | Coverage           |
|-------------------|--------------------|
| Function Coverage | 52.23% (14000/26805) |
| Line Coverage     | 40.96% (120601/294423) |
| Region Coverage   | 39.68% (61339/154602) |
| Branch Coverage   | 34.30% (30622/89276) |
author_association: NONE
user: login: wuwenchi
created_at: 2025-04-08T07:38:17Z
body: run buildall
author_association: CONTRIBUTOR
user: login: wuwenchi
created_at: 2025-04-08T07:39:42Z
body: run buildall
author_association: CONTRIBUTOR
user: login: doris-robot
created_at: 2025-04-08T09:40:10Z
body: 
<details>
<summary>TPC-H: <b>Total hot run time: 34313 ms</b></summary>

```
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/tpch-tools
Tpch sf100 test result on commit b6dedc3f913323cafee020ea1bbc45517d7b0884, data reload: false

------ Round 1 ----------------------------------
q1	26107	5173	5002	5002
q2	2078	275	183	183
q3	10591	1268	693	693
q4	10235	1027	543	543
q5	7924	2343	2398	2343
q6	193	167	134	134
q7	911	736	632	632
q8	9308	1369	1108	1108
q9	6792	5139	5111	5111
q10	6802	2333	1910	1910
q11	481	287	274	274
q12	351	364	222	222
q13	17764	3717	3104	3104
q14	234	227	210	210
q15	535	469	485	469
q16	626	639	596	596
q17	610	874	360	360
q18	7624	7258	7192	7192
q19	1697	969	556	556
q20	338	341	221	221
q21	3988	3522	2495	2495
q22	1079	1023	955	955
Total cold run time: 116268 ms
Total hot run time: 34313 ms

----- Round 2, with runtime_filter_mode=off -----
q1	5203	5147	5151	5147
q2	244	334	229	229
q3	2175	2678	2306	2306
q4	1386	1859	1447	1447
q5	4490	4391	4404	4391
q6	221	173	126	126
q7	1991	1941	1740	1740
q8	2619	2591	2561	2561
q9	7356	7007	7250	7007
q10	3020	3170	2749	2749
q11	577	524	501	501
q12	702	772	653	653
q13	3474	3919	3337	3337
q14	289	285	278	278
q15	530	485	479	479
q16	659	690	677	677
q17	1172	1595	1383	1383
q18	7709	7617	7481	7481
q19	814	812	817	812
q20	1933	1986	1906	1906
q21	5361	4910	4857	4857
q22	1105	1070	984	984
Total cold run time: 53030 ms
Total hot run time: 51051 ms
```
</details>

author_association: NONE
user: login: doris-robot
created_at: 2025-04-08T09:52:25Z
body: 
<details>
<summary>TPC-DS: <b>Total hot run time: 192471 ms</b></summary>

```
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/tpcds-tools
TPC-DS sf100 test result on commit b6dedc3f913323cafee020ea1bbc45517d7b0884, data reload: false

query1	1384	1064	1013	1013
query2	6269	1886	1896	1886
query3	10996	4666	4430	4430
query4	55123	25816	22878	22878
query5	4955	477	447	447
query6	332	198	186	186
query7	4917	485	285	285
query8	306	258	248	248
query9	5523	2522	2560	2522
query10	429	338	258	258
query11	15038	15293	14767	14767
query12	169	112	104	104
query13	1037	515	397	397
query14	10224	6379	6254	6254
query15	220	203	185	185
query16	7213	639	523	523
query17	1124	746	606	606
query18	1755	421	331	331
query19	210	207	176	176
query20	127	132	121	121
query21	216	133	109	109
query22	4443	4495	4242	4242
query23	34136	33404	33372	33372
query24	6517	2414	2386	2386
query25	456	467	416	416
query26	720	272	145	145
query27	2284	501	332	332
query28	3161	2456	2421	2421
query29	574	588	431	431
query30	278	220	196	196
query31	871	874	806	806
query32	75	61	62	61
query33	490	376	320	320
query34	768	905	514	514
query35	805	831	757	757
query36	947	993	888	888
query37	127	101	79	79
query38	4147	4152	4130	4130
query39	1484	1443	1425	1425
query40	205	124	114	114
query41	53	53	52	52
query42	131	110	107	107
query43	500	513	471	471
query44	1294	811	795	795
query45	186	171	168	168
query46	836	1027	626	626
query47	1911	1902	1809	1809
query48	368	405	309	309
query49	671	525	471	471
query50	682	694	401	401
query51	4254	4300	4216	4216
query52	117	110	99	99
query53	236	264	198	198
query54	598	576	510	510
query55	86	89	95	89
query56	329	296	301	296
query57	1190	1185	1107	1107
query58	273	268	263	263
query59	2683	2844	2728	2728
query60	336	324	355	324
query61	137	130	129	129
query62	736	749	667	667
query63	221	185	189	185
query64	1865	1053	735	735
query65	4384	4229	4222	4222
query66	753	404	310	310
query67	15991	15866	15305	15305
query68	7743	875	507	507
query69	536	312	265	265
query70	1208	1128	1111	1111
query71	500	308	308	308
query72	5915	4847	4824	4824
query73	1460	724	357	357
query74	8960	9125	9015	9015
query75	3736	3185	2711	2711
query76	4285	1189	757	757
query77	638	373	274	274
query78	9901	10063	9301	9301
query79	2207	801	553	553
query80	633	501	442	442
query81	473	267	222	222
query82	439	135	100	100
query83	365	266	243	243
query84	291	124	99	99
query85	799	428	323	323
query86	386	295	279	279
query87	4461	4450	4528	4450
query88	3298	2259	2241	2241
query89	414	318	281	281
query90	1970	218	221	218
query91	154	144	108	108
query92	81	62	55	55
query93	1364	947	581	581
query94	688	428	318	318
query95	423	308	286	286
query96	491	589	274	274
query97	3124	3247	3125	3125
query98	232	204	205	204
query99	1425	1411	1286	1286
Total cold run time: 299476 ms
Total hot run time: 192471 ms
```
</details>

author_association: NONE
user: login: doris-robot
created_at: 2025-04-08T09:57:50Z
body: 
<details>
<summary>ClickBench: <b>Total hot run time: 31.83 s</b></summary>

```
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/clickbench-tools
ClickBench test result on commit b6dedc3f913323cafee020ea1bbc45517d7b0884, data reload: false

query1	0.04	0.03	0.03
query2	0.14	0.11	0.11
query3	0.34	0.20	0.20
query4	1.58	0.20	0.10
query5	0.55	0.55	0.55
query6	1.18	0.72	0.71
query7	0.03	0.02	0.01
query8	0.05	0.05	0.05
query9	0.62	0.53	0.52
query10	0.57	0.58	0.57
query11	0.25	0.13	0.12
query12	0.25	0.13	0.13
query13	0.63	0.61	0.62
query14	2.65	2.72	2.68
query15	1.02	0.87	0.88
query16	0.36	0.38	0.38
query17	1.03	1.01	1.05
query18	0.21	0.19	0.21
query19	2.08	1.81	1.84
query20	0.02	0.02	0.01
query21	15.35	0.96	0.66
query22	0.94	1.01	0.84
query23	14.67	1.52	0.76
query24	5.31	0.59	0.30
query25	0.17	0.09	0.09
query26	0.55	0.22	0.18
query27	0.09	0.09	0.08
query28	11.06	1.13	0.58
query29	12.55	4.14	3.48
query30	0.28	0.08	0.06
query31	2.80	0.61	0.44
query32	3.23	0.59	0.51
query33	3.06	3.09	3.14
query34	16.65	5.09	4.47
query35	4.47	4.54	4.48
query36	0.63	0.51	0.50
query37	0.19	0.16	0.18
query38	0.16	0.16	0.15
query39	0.05	0.04	0.04
query40	0.20	0.16	0.17
query41	0.10	0.05	0.05
query42	0.06	0.05	0.06
query43	0.06	0.05	0.04
Total cold run time: 106.23 s
Total hot run time: 31.83 s
```
</details>

author_association: NONE
user: login: wuwenchi
created_at: 2025-04-09T02:49:51Z
body: run buildall
author_association: CONTRIBUTOR
user: login: doris-robot
created_at: 2025-04-09T03:08:46Z
body: TeamCity cloud ut coverage result:
 Function Coverage: 83.07% (1089/1311) 
 Line Coverage: 66.12% (18176/27488)
 Region Coverage: 65.55% (8952/13657)
 Branch Coverage: 55.39% (4823/8708)
 Coverage Report: http://coverage.selectdb-in.cc/coverage/385fdd808b16d43058578efe7fa26bc209329529_385fdd808b16d43058578efe7fa26bc209329529_cloud/report/index.html
author_association: NONE
user: login: doris-robot
created_at: 2025-04-09T04:58:46Z
body: 
<details>
<summary>TPC-H: <b>Total hot run time: 34086 ms</b></summary>

```
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/tpch-tools
Tpch sf100 test result on commit 385fdd808b16d43058578efe7fa26bc209329529, data reload: false

------ Round 1 ----------------------------------
q1	26351	5041	5019	5019
q2	2066	286	185	185
q3	10496	1263	690	690
q4	10245	1027	532	532
q5	7781	2369	2408	2369
q6	183	165	132	132
q7	936	744	599	599
q8	9313	1332	1186	1186
q9	6828	5143	5217	5143
q10	6837	2300	1886	1886
q11	490	294	267	267
q12	356	362	221	221
q13	17784	3665	3025	3025
q14	234	235	203	203
q15	541	497	489	489
q16	637	611	583	583
q17	588	868	356	356
q18	7834	7189	7031	7031
q19	1814	967	577	577
q20	332	338	220	220
q21	4037	2680	2407	2407
q22	1056	1042	966	966
Total cold run time: 116739 ms
Total hot run time: 34086 ms

----- Round 2, with runtime_filter_mode=off -----
q1	5383	5094	5148	5094
q2	245	343	237	237
q3	2148	2676	2327	2327
q4	1401	1810	1512	1512
q5	4501	4375	4381	4375
q6	223	171	130	130
q7	2011	1903	1761	1761
q8	2698	2714	2590	2590
q9	7344	7093	7116	7093
q10	2987	3148	2746	2746
q11	577	521	492	492
q12	683	771	615	615
q13	3491	3899	3358	3358
q14	282	314	260	260
q15	533	469	463	463
q16	696	689	642	642
q17	1183	1614	1362	1362
q18	7910	7712	7477	7477
q19	929	935	1083	935
q20	1946	1996	1848	1848
q21	5349	4852	4814	4814
q22	1103	1059	1032	1032
Total cold run time: 53623 ms
Total hot run time: 51163 ms
```
</details>

author_association: NONE
user: login: doris-robot
created_at: 2025-04-09T05:11:03Z
body: 
<details>
<summary>TPC-DS: <b>Total hot run time: 193117 ms</b></summary>

```
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/tpcds-tools
TPC-DS sf100 test result on commit 385fdd808b16d43058578efe7fa26bc209329529, data reload: false

query1	1470	1076	1054	1054
query2	6362	1910	1873	1873
query3	10994	4601	4563	4563
query4	55081	25501	22909	22909
query5	5087	492	460	460
query6	341	201	182	182
query7	4905	496	290	290
query8	330	266	259	259
query9	5880	2631	2648	2631
query10	432	326	269	269
query11	15204	14952	15016	14952
query12	168	107	104	104
query13	1060	526	398	398
query14	10203	6403	6356	6356
query15	222	195	184	184
query16	7117	686	502	502
query17	1108	763	626	626
query18	1579	445	324	324
query19	224	200	180	180
query20	128	139	124	124
query21	212	128	126	126
query22	4478	4389	4389	4389
query23	34115	33368	33141	33141
query24	6675	2432	2395	2395
query25	463	478	406	406
query26	698	277	154	154
query27	2303	506	339	339
query28	3288	2470	2488	2470
query29	600	589	438	438
query30	286	228	193	193
query31	865	916	818	818
query32	76	61	65	61
query33	457	375	305	305
query34	775	864	536	536
query35	815	850	772	772
query36	968	1025	897	897
query37	118	111	77	77
query38	4187	4150	4181	4150
query39	1525	1440	1454	1440
query40	212	118	107	107
query41	53	52	52	52
query42	121	101	101	101
query43	492	488	480	480
query44	1345	836	828	828
query45	178	174	174	174
query46	849	1021	638	638
query47	1902	1891	1789	1789
query48	395	438	297	297
query49	704	505	448	448
query50	650	701	408	408
query51	4245	4347	4329	4329
query52	113	108	105	105
query53	229	259	193	193
query54	587	566	513	513
query55	85	81	80	80
query56	292	314	298	298
query57	1183	1239	1132	1132
query58	287	284	265	265
query59	2758	2929	2571	2571
query60	331	330	315	315
query61	137	134	131	131
query62	721	755	704	704
query63	224	186	187	186
query64	1510	1133	707	707
query65	4449	4420	4351	4351
query66	763	421	316	316
query67	15839	15651	15684	15651
query68	7317	873	509	509
query69	539	300	310	300
query70	1205	1102	1088	1088
query71	503	328	299	299
query72	5883	4808	4788	4788
query73	1393	629	345	345
query74	9101	9105	8656	8656
query75	3777	3214	2723	2723
query76	4264	1207	774	774
query77	615	375	293	293
query78	10143	10107	9292	9292
query79	2857	804	557	557
query80	698	510	449	449
query81	481	251	218	218
query82	464	123	94	94
query83	379	266	237	237
query84	294	104	80	80
query85	801	368	315	315
query86	394	307	301	301
query87	4524	4598	4347	4347
query88	3378	2226	2215	2215
query89	410	309	277	277
query90	1763	205	210	205
query91	148	154	115	115
query92	79	58	56	56
query93	2361	928	572	572
query94	668	426	309	309
query95	365	293	287	287
query96	484	566	272	272
query97	3172	3225	3164	3164
query98	234	210	203	203
query99	1467	1442	1261	1261
Total cold run time: 301614 ms
Total hot run time: 193117 ms
```
</details>

author_association: NONE
user: login: doris-robot
created_at: 2025-04-09T05:16:27Z
body: 
<details>
<summary>ClickBench: <b>Total hot run time: 31.91 s</b></summary>

```
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/clickbench-tools
ClickBench test result on commit 385fdd808b16d43058578efe7fa26bc209329529, data reload: false

query1	0.03	0.03	0.03
query2	0.14	0.11	0.11
query3	0.34	0.20	0.19
query4	1.58	0.20	0.21
query5	0.63	0.63	0.61
query6	1.16	0.72	0.73
query7	0.02	0.02	0.02
query8	0.05	0.05	0.05
query9	0.64	0.53	0.51
query10	0.60	0.60	0.59
query11	0.25	0.12	0.12
query12	0.26	0.13	0.13
query13	0.63	0.62	0.61
query14	2.68	2.75	2.83
query15	0.99	0.88	0.88
query16	0.38	0.38	0.38
query17	1.06	1.04	1.03
query18	0.19	0.19	0.17
query19	1.99	2.06	1.82
query20	0.02	0.01	0.01
query21	15.36	0.99	0.66
query22	0.94	1.00	0.83
query23	14.70	1.60	0.75
query24	5.47	0.58	0.28
query25	0.15	0.10	0.09
query26	0.55	0.21	0.18
query27	0.08	0.08	0.09
query28	11.02	1.32	0.58
query29	12.57	4.20	3.42
query30	0.27	0.08	0.06
query31	2.81	0.63	0.42
query32	3.24	0.59	0.49
query33	3.14	3.06	3.09
query34	16.68	5.17	4.47
query35	4.50	4.49	4.46
query36	0.64	0.50	0.49
query37	0.19	0.18	0.17
query38	0.18	0.15	0.15
query39	0.05	0.04	0.04
query40	0.20	0.15	0.16
query41	0.11	0.05	0.05
query42	0.07	0.05	0.05
query43	0.05	0.05	0.05
Total cold run time: 106.61 s
Total hot run time: 31.91 s
```
</details>

author_association: NONE
user: login: wuwenchi
created_at: 2025-04-15T02:31:12Z
body: run buildall
author_association: CONTRIBUTOR
user: login: doris-robot
created_at: 2025-04-15T03:01:01Z
body: TeamCity cloud ut coverage result:
 Function Coverage: 83.00% (1089/1312) 
 Line Coverage: 66.04% (18159/27496)
 Region Coverage: 65.49% (8946/13661)
 Branch Coverage: 55.29% (4816/8710)
 Coverage Report: http://coverage.selectdb-in.cc/coverage/d283cb49b6742cb86b01ba37bacc2cd8984c266c_d283cb49b6742cb86b01ba37bacc2cd8984c266c_cloud/report/index.html
author_association: NONE
user: login: hello-stephen
created_at: 2025-04-15T06:04:55Z
body: # BE UT Coverage Report
Increment line coverage `19.35% (12/62)` :tada:

[Increment coverage report](http://coverage.selectdb-in.cc/coverage/d283cb49b6742cb86b01ba37bacc2cd8984c266c_d283cb49b6742cb86b01ba37bacc2cd8984c266c/increment_report/index.html)
[Complete coverage report](http://coverage.selectdb-in.cc/coverage/d283cb49b6742cb86b01ba37bacc2cd8984c266c_d283cb49b6742cb86b01ba37bacc2cd8984c266c/report/index.html)
| Category          | Coverage           |
|-------------------|--------------------|
| Function Coverage | 52.41% (14093/26891) |
| Line Coverage     | 41.33% (122130/295531) |
| Region Coverage   | 40.04% (62132/155185) |
| Branch Coverage   | 34.70% (31117/89672) |
author_association: CONTRIBUTOR
user: login: wuwenchi
created_at: 2025-04-15T11:28:58Z
body: run buildall
author_association: CONTRIBUTOR
user: login: doris-robot
created_at: 2025-04-15T11:47:03Z
body: TeamCity cloud ut coverage result:
 Function Coverage: 83.00% (1089/1312) 
 Line Coverage: 66.08% (18169/27496)
 Region Coverage: 65.52% (8951/13661)
 Branch Coverage: 55.37% (4823/8710)
 Coverage Report: http://coverage.selectdb-in.cc/coverage/91473f6826b27c6af719d1e376205109088617c7_91473f6826b27c6af719d1e376205109088617c7_cloud/report/index.html
author_association: NONE
user: login: doris-robot
created_at: 2025-04-15T12:26:37Z
body: 
<details>
<summary>TPC-H: <b>Total hot run time: 34174 ms</b></summary>

```
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/tpch-tools
Tpch sf100 test result on commit 91473f6826b27c6af719d1e376205109088617c7, data reload: false

------ Round 1 ----------------------------------
q1	26367	5235	5016	5016
q2	2075	285	195	195
q3	10626	1277	712	712
q4	10268	1023	527	527
q5	7883	2414	2330	2330
q6	195	172	138	138
q7	934	735	623	623
q8	9338	1311	1077	1077
q9	6822	5150	5204	5150
q10	6862	2300	1877	1877
q11	478	294	277	277
q12	359	361	214	214
q13	17779	3656	3044	3044
q14	225	232	211	211
q15	530	487	487	487
q16	610	618	580	580
q17	588	863	352	352
q18	7736	7251	7090	7090
q19	2529	988	557	557
q20	319	314	216	216
q21	4332	3584	2529	2529
q22	1063	1002	972	972
Total cold run time: 117918 ms
Total hot run time: 34174 ms

----- Round 2, with runtime_filter_mode=off -----
q1	5243	5083	5167	5083
q2	245	327	233	233
q3	2154	2656	2257	2257
q4	1479	1966	1524	1524
q5	4482	4405	4369	4369
q6	220	169	126	126
q7	1985	1916	1714	1714
q8	2591	2487	2573	2487
q9	7301	6967	7176	6967
q10	2997	3163	2771	2771
q11	575	507	483	483
q12	692	769	650	650
q13	3483	3886	3323	3323
q14	281	290	275	275
q15	520	495	471	471
q16	633	686	642	642
q17	1154	1500	1376	1376
q18	7810	7652	7525	7525
q19	819	798	863	798
q20	1889	1988	1905	1905
q21	5516	4819	4896	4819
q22	1096	1091	1009	1009
Total cold run time: 53165 ms
Total hot run time: 50807 ms
```
</details>

author_association: NONE
user: login: doris-robot
created_at: 2025-04-15T12:38:44Z
body: 
<details>
<summary>TPC-DS: <b>Total hot run time: 193407 ms</b></summary>

```
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/tpcds-tools
TPC-DS sf100 test result on commit 91473f6826b27c6af719d1e376205109088617c7, data reload: false

query1	1405	1086	1077	1077
query2	6268	1894	1878	1878
query3	10957	4496	4571	4496
query4	54129	24987	23415	23415
query5	4987	517	470	470
query6	353	206	193	193
query7	4887	519	285	285
query8	308	249	244	244
query9	5247	2591	2578	2578
query10	417	314	253	253
query11	14986	14979	14827	14827
query12	158	110	102	102
query13	1038	517	382	382
query14	10005	6296	6292	6292
query15	218	205	174	174
query16	7116	665	459	459
query17	1087	734	586	586
query18	1616	413	301	301
query19	196	188	164	164
query20	134	126	121	121
query21	213	131	109	109
query22	4562	4405	4443	4405
query23	34155	33566	33460	33460
query24	6658	2454	2432	2432
query25	471	474	403	403
query26	680	283	157	157
query27	2185	510	331	331
query28	3078	2425	2444	2425
query29	585	555	437	437
query30	275	224	195	195
query31	879	860	806	806
query32	72	66	62	62
query33	450	372	305	305
query34	760	878	526	526
query35	798	869	791	791
query36	960	1007	905	905
query37	120	98	83	83
query38	4178	4353	4225	4225
query39	1556	1434	1434	1434
query40	211	121	106	106
query41	55	53	55	53
query42	118	111	105	105
query43	499	490	489	489
query44	1347	832	812	812
query45	183	176	173	173
query46	854	1029	643	643
query47	1829	1897	1806	1806
query48	386	414	303	303
query49	675	505	438	438
query50	676	703	403	403
query51	4381	4351	4195	4195
query52	107	105	95	95
query53	225	259	192	192
query54	595	605	519	519
query55	86	83	84	83
query56	296	283	289	283
query57	1149	1173	1120	1120
query58	257	267	259	259
query59	2661	2828	2672	2672
query60	321	327	312	312
query61	131	130	173	130
query62	735	730	684	684
query63	227	182	194	182
query64	1502	1076	723	723
query65	4423	4270	4237	4237
query66	695	409	310	310
query67	15888	15504	15438	15438
query68	5659	835	510	510
query69	523	300	269	269
query70	1214	1114	1075	1075
query71	446	331	286	286
query72	5723	4723	4833	4723
query73	1326	641	348	348
query74	8854	9005	9003	9003
query75	3337	3165	2721	2721
query76	3798	1186	765	765
query77	547	375	287	287
query78	10004	10242	9373	9373
query79	1386	809	550	550
query80	576	516	438	438
query81	473	265	222	222
query82	193	125	95	95
query83	255	248	238	238
query84	302	101	89	89
query85	829	358	308	308
query86	350	298	291	291
query87	4362	4414	4376	4376
query88	2768	2196	2191	2191
query89	401	320	277	277
query90	1766	204	202	202
query91	154	146	114	114
query92	68	59	57	57
query93	1595	926	572	572
query94	637	410	305	305
query95	368	301	280	280
query96	474	571	264	264
query97	3145	3269	3139	3139
query98	219	203	196	196
query99	1328	1382	1290	1290
Total cold run time: 291739 ms
Total hot run time: 193407 ms
```
</details>

author_association: NONE
user: login: doris-robot
created_at: 2025-04-15T12:44:15Z
body: 
<details>
<summary>ClickBench: <b>Total hot run time: 31.68 s</b></summary>

```
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/clickbench-tools
ClickBench test result on commit 91473f6826b27c6af719d1e376205109088617c7, data reload: false

query1	0.04	0.03	0.03
query2	0.14	0.11	0.10
query3	0.35	0.20	0.20
query4	1.59	0.19	0.20
query5	0.60	0.59	0.62
query6	1.19	0.72	0.73
query7	0.03	0.02	0.02
query8	0.05	0.05	0.06
query9	0.61	0.54	0.52
query10	0.57	0.59	0.58
query11	0.26	0.13	0.12
query12	0.24	0.13	0.13
query13	0.63	0.62	0.61
query14	2.67	2.73	2.66
query15	0.99	0.86	0.87
query16	0.38	0.37	0.37
query17	1.05	1.02	1.03
query18	0.19	0.18	0.18
query19	1.91	1.99	1.86
query20	0.01	0.01	0.02
query21	15.37	0.96	0.66
query22	0.93	0.97	0.80
query23	14.74	1.51	0.75
query24	5.26	0.58	0.29
query25	0.16	0.09	0.08
query26	0.54	0.21	0.18
query27	0.08	0.08	0.08
query28	11.04	1.18	0.57
query29	12.57	4.05	3.38
query30	0.27	0.08	0.06
query31	2.85	0.63	0.43
query32	3.22	0.60	0.50
query33	3.07	3.12	3.06
query34	16.71	5.06	4.40
query35	4.46	4.50	4.48
query36	0.64	0.51	0.48
query37	0.19	0.18	0.17
query38	0.17	0.15	0.15
query39	0.05	0.04	0.04
query40	0.19	0.16	0.16
query41	0.12	0.05	0.05
query42	0.07	0.06	0.05
query43	0.06	0.04	0.04
Total cold run time: 106.26 s
Total hot run time: 31.68 s
```
</details>

author_association: NONE
user: login: hello-stephen
created_at: 2025-04-15T13:16:33Z
body: # BE UT Coverage Report
Increment line coverage `19.35% (12/62)` :tada:

[Increment coverage report](http://coverage.selectdb-in.cc/coverage/91473f6826b27c6af719d1e376205109088617c7_91473f6826b27c6af719d1e376205109088617c7/increment_report/index.html)
[Complete coverage report](http://coverage.selectdb-in.cc/coverage/91473f6826b27c6af719d1e376205109088617c7_91473f6826b27c6af719d1e376205109088617c7/report/index.html)
| Category          | Coverage           |
|-------------------|--------------------|
| Function Coverage | 52.43% (14112/26914) |
| Line Coverage     | 41.36% (122389/295900) |
| Region Coverage   | 40.07% (62263/155393) |
| Branch Coverage   | 34.78% (31256/89872) |
author_association: CONTRIBUTOR
user: login: wuwenchi
created_at: 2025-04-16T03:13:19Z
body: run buildall
author_association: CONTRIBUTOR
user: login: doris-robot
created_at: 2025-04-16T03:30:44Z
body: TeamCity cloud ut coverage result:
 Function Coverage: 83.00% (1089/1312) 
 Line Coverage: 66.06% (18167/27500)
 Region Coverage: 65.51% (8952/13666)
 Branch Coverage: 55.39% (4827/8714)
 Coverage Report: http://coverage.selectdb-in.cc/coverage/2e1676574a59ec809716ed1e745a26349377611c_2e1676574a59ec809716ed1e745a26349377611c_cloud/report/index.html
author_association: NONE
user: login: doris-robot
created_at: 2025-04-16T05:21:08Z
body: 
<details>
<summary>TPC-H: <b>Total hot run time: 34136 ms</b></summary>

```
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/tpch-tools
Tpch sf100 test result on commit 2e1676574a59ec809716ed1e745a26349377611c, data reload: false

------ Round 1 ----------------------------------
q1	26034	5061	5028	5028
q2	2068	281	183	183
q3	10577	1234	717	717
q4	10227	1006	569	569
q5	7982	2405	2342	2342
q6	192	168	134	134
q7	921	741	604	604
q8	9295	1287	1140	1140
q9	6807	5059	5058	5058
q10	6810	2288	1894	1894
q11	492	288	284	284
q12	354	351	219	219
q13	17765	3709	3090	3090
q14	219	232	205	205
q15	545	490	485	485
q16	447	452	402	402
q17	629	869	386	386
q18	7476	7192	7198	7192
q19	1844	982	558	558
q20	341	341	229	229
q21	4185	3375	2462	2462
q22	1044	984	955	955
Total cold run time: 116254 ms
Total hot run time: 34136 ms

----- Round 2, with runtime_filter_mode=off -----
q1	5170	5097	5097	5097
q2	243	328	236	236
q3	2149	2680	2279	2279
q4	1471	1816	1523	1523
q5	4506	4437	4414	4414
q6	226	177	133	133
q7	1972	1895	1754	1754
q8	2637	2721	2636	2636
q9	7343	7013	7066	7013
q10	2979	3164	2750	2750
q11	588	520	510	510
q12	682	796	610	610
q13	3488	3955	3332	3332
q14	287	293	275	275
q15	518	480	483	480
q16	479	515	463	463
q17	1178	1602	1379	1379
q18	7772	7592	7471	7471
q19	823	802	866	802
q20	1953	1957	1863	1863
q21	5267	4934	4738	4738
q22	1102	1071	1035	1035
Total cold run time: 52833 ms
Total hot run time: 50793 ms
```
</details>

author_association: NONE
user: login: doris-robot
created_at: 2025-04-16T05:33:22Z
body: 
<details>
<summary>TPC-DS: <b>Total hot run time: 192504 ms</b></summary>

```
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/tpcds-tools
TPC-DS sf100 test result on commit 2e1676574a59ec809716ed1e745a26349377611c, data reload: false

query1	1449	1059	1082	1059
query2	6332	1842	1818	1818
query3	10992	4595	4463	4463
query4	54674	26544	23443	23443
query5	5068	504	463	463
query6	354	202	188	188
query7	4956	506	285	285
query8	325	239	230	230
query9	6150	2566	2558	2558
query10	435	327	282	282
query11	15120	15079	14887	14887
query12	165	114	106	106
query13	1108	508	398	398
query14	10223	6494	6441	6441
query15	192	196	168	168
query16	7143	700	484	484
query17	1062	759	572	572
query18	1537	427	308	308
query19	196	204	153	153
query20	126	119	117	117
query21	202	125	108	108
query22	4330	4461	4357	4357
query23	34126	33196	33519	33196
query24	6572	2455	2456	2455
query25	470	467	399	399
query26	679	274	153	153
query27	2302	495	329	329
query28	3273	2155	2166	2155
query29	563	566	441	441
query30	275	227	203	203
query31	871	863	776	776
query32	78	65	62	62
query33	443	369	333	333
query34	752	874	535	535
query35	801	839	785	785
query36	943	1017	915	915
query37	118	107	81	81
query38	4258	4246	4184	4184
query39	1495	1429	1416	1416
query40	219	127	115	115
query41	62	63	58	58
query42	119	109	119	109
query43	516	518	493	493
query44	1314	825	803	803
query45	187	183	171	171
query46	843	1032	650	650
query47	1812	1892	1783	1783
query48	399	439	310	310
query49	699	508	429	429
query50	667	706	413	413
query51	4241	4387	4194	4194
query52	114	115	111	111
query53	233	259	182	182
query54	584	566	513	513
query55	82	85	90	85
query56	313	308	327	308
query57	1133	1199	1111	1111
query58	268	264	269	264
query59	2701	2917	2760	2760
query60	332	317	309	309
query61	127	122	124	122
query62	734	753	699	699
query63	240	188	194	188
query64	1712	1039	690	690
query65	4338	4236	4224	4224
query66	708	400	297	297
query67	15893	15447	15205	15205
query68	7641	864	505	505
query69	536	319	260	260
query70	1249	1155	1134	1134
query71	495	315	283	283
query72	5340	4738	4824	4738
query73	1362	633	340	340
query74	8902	9045	8896	8896
query75	3810	3187	2690	2690
query76	4304	1211	746	746
query77	616	362	275	275
query78	9827	10088	9205	9205
query79	2392	809	573	573
query80	694	512	445	445
query81	477	258	216	216
query82	483	122	96	96
query83	347	246	228	228
query84	293	105	83	83
query85	803	366	316	316
query86	365	313	304	304
query87	4437	4427	4388	4388
query88	2841	2246	2169	2169
query89	389	308	275	275
query90	1992	211	209	209
query91	142	141	118	118
query92	75	61	53	53
query93	1152	920	576	576
query94	697	399	310	310
query95	366	293	290	290
query96	491	558	272	272
query97	3108	3237	3142	3142
query98	218	210	201	201
query99	1436	1435	1266	1266
Total cold run time: 298028 ms
Total hot run time: 192504 ms
```
</details>

author_association: NONE
user: login: doris-robot
created_at: 2025-04-16T05:38:38Z
body: 
<details>
<summary>ClickBench: <b>Total hot run time: 30.36 s</b></summary>

```
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/clickbench-tools
ClickBench test result on commit 2e1676574a59ec809716ed1e745a26349377611c, data reload: false

query1	0.04	0.04	0.03
query2	0.15	0.11	0.11
query3	0.34	0.21	0.20
query4	1.59	0.19	0.19
query5	0.63	0.63	0.63
query6	1.20	0.74	0.74
query7	0.03	0.02	0.01
query8	0.06	0.04	0.04
query9	0.62	0.54	0.52
query10	0.58	0.60	0.57
query11	0.26	0.13	0.12
query12	0.25	0.12	0.14
query13	0.64	0.62	0.61
query14	1.16	1.20	1.18
query15	0.97	0.88	0.89
query16	0.38	0.39	0.39
query17	1.04	1.02	1.06
query18	0.20	0.21	0.18
query19	2.01	1.82	1.84
query20	0.02	0.02	0.01
query21	15.40	0.98	0.68
query22	0.93	1.08	0.78
query23	14.71	1.52	0.75
query24	5.47	0.53	0.28
query25	0.17	0.10	0.09
query26	0.55	0.24	0.18
query27	0.08	0.09	0.09
query28	11.03	1.18	0.57
query29	12.54	4.12	3.44
query30	0.29	0.09	0.07
query31	2.82	0.63	0.42
query32	3.24	0.60	0.50
query33	3.08	3.09	3.10
query34	16.22	5.18	4.44
query35	4.52	4.48	4.44
query36	0.66	0.52	0.51
query37	0.19	0.17	0.16
query38	0.17	0.17	0.16
query39	0.05	0.04	0.05
query40	0.22	0.15	0.15
query41	0.10	0.05	0.05
query42	0.06	0.06	0.05
query43	0.05	0.05	0.05
Total cold run time: 104.72 s
Total hot run time: 30.36 s
```
</details>

author_association: NONE
user: login: hello-stephen
created_at: 2025-04-16T06:37:14Z
body: # BE UT Coverage Report
Increment line coverage `19.35% (12/62)` :tada:

[Increment coverage report](http://coverage.selectdb-in.cc/coverage/2e1676574a59ec809716ed1e745a26349377611c_2e1676574a59ec809716ed1e745a26349377611c/increment_report/index.html)
[Complete coverage report](http://coverage.selectdb-in.cc/coverage/2e1676574a59ec809716ed1e745a26349377611c_2e1676574a59ec809716ed1e745a26349377611c/report/index.html)
| Category          | Coverage           |
|-------------------|--------------------|
| Function Coverage | 52.83% (14225/26927) |
| Line Coverage     | 41.71% (123442/295948) |
| Region Coverage   | 40.44% (62867/155460) |
| Branch Coverage   | 35.07% (31533/89906) |
author_association: CONTRIBUTOR
user: login: wuwenchi
created_at: 2025-04-22T06:02:22Z
body: run buildall
author_association: CONTRIBUTOR
user: login: doris-robot
created_at: 2025-04-22T06:08:08Z
body: TeamCity cloud ut coverage result:
 Function Coverage: 82.93% (1093/1318) 
 Line Coverage: 65.66% (18262/27814)
 Region Coverage: 65.05% (9043/13902)
 Branch Coverage: 55.00% (4866/8848)
 Coverage Report: http://coverage.selectdb-in.cc/coverage/a9e5798b2a09a3961d62a641ab9f4647f99f8dea_a9e5798b2a09a3961d62a641ab9f4647f99f8dea_cloud/report/index.html
author_association: NONE
user: login: wuwenchi
created_at: 2025-04-22T07:45:39Z
body: run buildall
author_association: CONTRIBUTOR
user: login: doris-robot
created_at: 2025-04-22T07:51:42Z
body: TeamCity cloud ut coverage result:
 Function Coverage: 82.93% (1093/1318) 
 Line Coverage: 65.68% (18269/27814)
 Region Coverage: 65.07% (9048/13904)
 Branch Coverage: 55.04% (4871/8850)
 Coverage Report: http://coverage.selectdb-in.cc/coverage/0c95abe4786c0d69d89f37ad45d867636c91e188_0c95abe4786c0d69d89f37ad45d867636c91e188_cloud/report/index.html
author_association: NONE
user: login: doris-robot
created_at: 2025-04-22T10:58:41Z
body: # BE UT Coverage Report
Increment line coverage `17.14% (12/70)` :tada:

[Increment coverage report](http://coverage.selectdb-in.cc/coverage/0c95abe4786c0d69d89f37ad45d867636c91e188_0c95abe4786c0d69d89f37ad45d867636c91e188/increment_report/index.html)
[Complete coverage report](http://coverage.selectdb-in.cc/coverage/0c95abe4786c0d69d89f37ad45d867636c91e188_0c95abe4786c0d69d89f37ad45d867636c91e188/report/index.html)
| Category          | Coverage           |
|-------------------|--------------------|
| Function Coverage | 53.54% (14539/27154) |
| Line Coverage     | 42.38% (126042/297402) |
| Region Coverage   | 41.18% (64403/156391) |
| Branch Coverage   | 35.76% (32373/90516) |
author_association: NONE
user: login: wuwenchi
created_at: 2025-04-22T11:34:51Z
body: run buildall
author_association: CONTRIBUTOR
user: login: doris-robot
created_at: 2025-04-22T11:40:40Z
body: TeamCity cloud ut coverage result:
 Function Coverage: 82.93% (1093/1318) 
 Line Coverage: 65.67% (18265/27814)
 Region Coverage: 65.06% (9046/13904)
 Branch Coverage: 55.06% (4873/8850)
 Coverage Report: http://coverage.selectdb-in.cc/coverage/ba6080fe385ae3d71d40402f43d7b3f34c51a5d8_ba6080fe385ae3d71d40402f43d7b3f34c51a5d8_cloud/report/index.html
author_association: NONE
user: login: doris-robot
created_at: 2025-04-22T12:22:54Z
body: 
<details>
<summary>TPC-H: <b>Total hot run time: 33919 ms</b></summary>

```
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/tpch-tools
Tpch sf100 test result on commit ba6080fe385ae3d71d40402f43d7b3f34c51a5d8, data reload: false

------ Round 1 ----------------------------------
q1	26298	5059	5034	5034
q2	2070	281	188	188
q3	10508	1233	678	678
q4	10244	993	528	528
q5	7728	2422	2314	2314
q6	189	161	131	131
q7	908	728	614	614
q8	9314	1222	1198	1198
q9	6802	5106	5054	5054
q10	6882	2297	1897	1897
q11	473	283	285	283
q12	358	364	222	222
q13	17769	3646	3058	3058
q14	221	235	207	207
q15	527	466	475	466
q16	446	450	415	415
q17	614	847	367	367
q18	7647	7148	7058	7058
q19	1719	987	558	558
q20	331	316	232	232
q21	4260	3400	2456	2456
q22	1063	1020	961	961
Total cold run time: 116371 ms
Total hot run time: 33919 ms

----- Round 2, with runtime_filter_mode=off -----
q1	5625	5110	5108	5108
q2	238	340	231	231
q3	2125	2664	2246	2246
q4	1416	1820	1494	1494
q5	4464	4395	4408	4395
q6	218	168	125	125
q7	2056	1919	1777	1777
q8	2598	2590	2496	2496
q9	7219	7169	6994	6994
q10	2993	3197	2724	2724
q11	612	516	500	500
q12	687	746	606	606
q13	3530	3907	3290	3290
q14	282	323	303	303
q15	517	488	497	488
q16	469	488	458	458
q17	1151	1549	1401	1401
q18	7836	7532	7439	7439
q19	825	813	993	813
q20	1974	1965	1841	1841
q21	5190	4919	4811	4811
q22	1110	1059	994	994
Total cold run time: 53135 ms
Total hot run time: 50534 ms
```
</details>

author_association: NONE
user: login: doris-robot
created_at: 2025-04-22T12:35:02Z
body: 
<details>
<summary>TPC-DS: <b>Total hot run time: 191586 ms</b></summary>

```
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/tpcds-tools
TPC-DS sf100 test result on commit ba6080fe385ae3d71d40402f43d7b3f34c51a5d8, data reload: false

query1	1405	1075	1070	1070
query2	6340	1773	1809	1773
query3	10991	4405	4493	4405
query4	53922	25382	23040	23040
query5	5103	562	445	445
query6	317	195	193	193
query7	4883	490	286	286
query8	316	262	239	239
query9	5336	2554	2547	2547
query10	461	315	255	255
query11	15009	15225	14861	14861
query12	163	109	105	105
query13	1044	534	383	383
query14	10038	6111	6241	6111
query15	210	197	182	182
query16	7138	679	475	475
query17	1064	719	566	566
query18	1605	425	324	324
query19	199	190	155	155
query20	126	126	126	126
query21	204	125	108	108
query22	4366	4481	4310	4310
query23	34111	33459	33351	33351
query24	6621	2390	2383	2383
query25	459	459	400	400
query26	682	276	151	151
query27	2283	521	336	336
query28	3098	2136	2102	2102
query29	563	561	419	419
query30	270	223	192	192
query31	871	846	797	797
query32	76	99	61	61
query33	454	369	309	309
query34	783	879	520	520
query35	826	831	747	747
query36	944	1022	897	897
query37	118	96	76	76
query38	4119	4220	4201	4201
query39	1505	1450	1442	1442
query40	216	113	103	103
query41	54	53	51	51
query42	125	104	102	102
query43	499	516	498	498
query44	1324	807	834	807
query45	185	182	168	168
query46	856	1043	642	642
query47	1839	1863	1775	1775
query48	384	405	311	311
query49	666	530	405	405
query50	660	705	400	400
query51	4142	4227	4204	4204
query52	110	115	102	102
query53	244	267	196	196
query54	581	572	513	513
query55	85	80	84	80
query56	299	354	293	293
query57	1167	1175	1102	1102
query58	258	259	247	247
query59	2691	2839	2683	2683
query60	340	336	300	300
query61	124	129	127	127
query62	752	748	691	691
query63	227	187	184	184
query64	1496	1017	843	843
query65	4300	4230	4238	4230
query66	739	409	323	323
query67	15850	15490	15345	15345
query68	5594	891	508	508
query69	534	306	266	266
query70	1178	1098	1109	1098
query71	430	322	294	294
query72	6191	4993	4904	4904
query73	1367	705	341	341
query74	8872	8847	8855	8847
query75	3176	3165	2684	2684
query76	3804	1181	747	747
query77	544	371	284	284
query78	9914	10143	9229	9229
query79	2760	796	575	575
query80	881	582	436	436
query81	511	255	217	217
query82	516	124	94	94
query83	284	243	246	243
query84	293	104	79	79
query85	803	345	301	301
query86	443	283	299	283
query87	4390	4418	4208	4208
query88	3438	2219	2210	2210
query89	412	311	283	283
query90	1635	201	209	201
query91	139	144	113	113
query92	70	64	54	54
query93	2556	935	562	562
query94	772	411	298	298
query95	366	296	282	282
query96	481	560	269	269
query97	3105	3275	3118	3118
query98	230	205	202	202
query99	1391	1397	1288	1288
Total cold run time: 295316 ms
Total hot run time: 191586 ms
```
</details>

author_association: NONE
user: login: doris-robot
created_at: 2025-04-22T12:40:22Z
body: 
<details>
<summary>ClickBench: <b>Total hot run time: 30.19 s</b></summary>

```
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/clickbench-tools
ClickBench test result on commit ba6080fe385ae3d71d40402f43d7b3f34c51a5d8, data reload: false

query1	0.03	0.04	0.04
query2	0.15	0.11	0.10
query3	0.35	0.19	0.20
query4	1.59	0.20	0.07
query5	0.57	0.57	0.54
query6	1.18	0.72	0.72
query7	0.02	0.01	0.01
query8	0.06	0.05	0.05
query9	0.63	0.53	0.53
query10	0.57	0.58	0.56
query11	0.26	0.13	0.13
query12	0.25	0.13	0.14
query13	0.63	0.62	0.61
query14	1.16	1.21	1.25
query15	0.95	0.88	0.87
query16	0.38	0.41	0.37
query17	1.03	1.04	1.03
query18	0.19	0.18	0.17
query19	1.93	1.83	1.85
query20	0.02	0.02	0.04
query21	15.42	0.97	0.67
query22	0.94	1.03	0.80
query23	14.70	1.59	0.77
query24	5.51	0.57	0.28
query25	0.17	0.10	0.08
query26	0.55	0.23	0.18
query27	0.08	0.08	0.09
query28	11.05	1.28	0.59
query29	12.57	4.21	3.47
query30	0.28	0.08	0.07
query31	2.83	0.65	0.42
query32	3.23	0.59	0.50
query33	3.12	3.09	3.12
query34	16.80	5.24	4.40
query35	4.51	4.47	4.45
query36	0.63	0.51	0.49
query37	0.19	0.17	0.18
query38	0.16	0.16	0.16
query39	0.04	0.04	0.05
query40	0.19	0.16	0.16
query41	0.10	0.05	0.05
query42	0.06	0.06	0.05
query43	0.06	0.04	0.05
Total cold run time: 105.14 s
Total hot run time: 30.19 s
```
</details>

author_association: NONE
user: login: hello-stephen
created_at: 2025-04-22T13:04:38Z
body: # BE UT Coverage Report
Increment line coverage `17.14% (12/70)` :tada:

[Increment coverage report](http://coverage.selectdb-in.cc/coverage/ba6080fe385ae3d71d40402f43d7b3f34c51a5d8_ba6080fe385ae3d71d40402f43d7b3f34c51a5d8/increment_report/index.html)
[Complete coverage report](http://coverage.selectdb-in.cc/coverage/ba6080fe385ae3d71d40402f43d7b3f34c51a5d8_ba6080fe385ae3d71d40402f43d7b3f34c51a5d8/report/index.html)
| Category          | Coverage           |
|-------------------|--------------------|
| Function Coverage | 53.54% (14538/27154) |
| Line Coverage     | 42.36% (125999/297419) |
| Region Coverage   | 41.17% (64394/156403) |
| Branch Coverage   | 35.75% (32363/90528) |
author_association: CONTRIBUTOR
user: login: hello-stephen
created_at: 2025-04-22T17:13:07Z
body: # BE Regression P0 && UT Coverage Report
Increment line coverage `17.14% (12/70)` :tada:

[Increment coverage report](http://coverage.selectdb-in.cc/coverage/49688_ba6080fe385ae3d71d40402f43d7b3f34c51a5d8_merge/increment_report/index.html)
[Complete coverage report](http://coverage.selectdb-in.cc/coverage/49688_ba6080fe385ae3d71d40402f43d7b3f34c51a5d8_merge/report/index.html)
| Category          | Coverage           |
|-------------------|--------------------|
| Function Coverage |                    |
| Line Coverage     |                    |
| Region Coverage   |                    |
| Branch Coverage   |                    |
author_association: CONTRIBUTOR
user: login: github-actions[bot]
created_at: 2025-04-23T06:13:04Z
body: PR approved by anyone and no changes requested.
author_association: CONTRIBUTOR
user: login: github-actions[bot]
created_at: 2025-04-23T06:15:13Z
body: PR approved by at least one committer and no changes requested.
author_association: CONTRIBUTOR