Repository: apache/doris
Pull request #49864: [Opt](profile) Add profile for `sync_rowsets`
Author: login: bobhan1
Labels: name: approved
description: Indicates a PR has been approved by one committer.
name: reviewed
name: usercase
description: Important user case type label
name: dev/3.0.5-merged
Created: 2025-04-08T03:37:33Z | Merged: 2025-04-09T01:28:44Z

### What problem does this PR solve?

![image](https://github.com/user-attachments/assets/bda9628a-4a60-4b13-a66c-7f09ca0081d2)



### Release note

None

### Check List (For Author)

- Test <!-- At least one of them must be included. -->
    - [ ] Regression test
    - [ ] Unit Test
    - [x] 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/cloud/cloud_meta_mgr.cpp b/be/src/cloud/cloud_meta_mgr.cpp
index 839f46ce1cd688..6d02a179a2135e 100644
--- a/be/src/cloud/cloud_meta_mgr.cpp
+++ b/be/src/cloud/cloud_meta_mgr.cpp
@@ -481,7 +481,8 @@ Status CloudMetaMgr::get_tablet_meta(int64_t tablet_id, TabletMetaSharedPtr* tab
     return Status::OK();
 }
 
-Status CloudMetaMgr::sync_tablet_rowsets(CloudTablet* tablet, const SyncOptions& options) {
+Status CloudMetaMgr::sync_tablet_rowsets(CloudTablet* tablet, const SyncOptions& options,
+                                         SyncRowsetStats* sync_stats) {
     using namespace std::chrono;
 
     TEST_SYNC_POINT_RETURN_WITH_VALUE("CloudMetaMgr::sync_tablet_rowsets", Status::OK(), tablet);
@@ -566,6 +567,11 @@ Status CloudMetaMgr::sync_tablet_rowsets(CloudTablet* tablet, const SyncOptions&
         int64_t now = duration_cast<seconds>(system_clock::now().time_since_epoch()).count();
         tablet->last_sync_time_s = now;
 
+        if (sync_stats) {
+            sync_stats->get_remote_rowsets_rpc_ms += latency / 1000;
+            sync_stats->get_remote_rowsets_num += resp.rowset_meta().size();
+        }
+
         // If is mow, the tablet has no delete bitmap in base rowsets.
         // So dont need to sync it.
         if (options.sync_delete_bitmap && tablet->enable_unique_key_merge_on_write() &&
@@ -574,7 +580,7 @@ Status CloudMetaMgr::sync_tablet_rowsets(CloudTablet* tablet, const SyncOptions&
             int64_t old_max_version = req.start_version() - 1;
             auto st = sync_tablet_delete_bitmap(tablet, old_max_version, resp.rowset_meta(),
                                                 resp.stats(), req.idx(), &delete_bitmap,
-                                                options.full_sync);
+                                                options.full_sync, sync_stats);
             if (st.is<ErrorCode::ROWSETS_EXPIRED>() && tried++ < retry_times) {
                 LOG_WARNING("rowset meta is expired, need to retry")
                         .tag("tablet", tablet->tablet_id())
@@ -746,13 +752,17 @@ bool CloudMetaMgr::sync_tablet_delete_bitmap_by_cache(CloudTablet* tablet, int64
 Status CloudMetaMgr::sync_tablet_delete_bitmap(CloudTablet* tablet, int64_t old_max_version,
                                                std::ranges::range auto&& rs_metas,
                                                const TabletStatsPB& stats, const TabletIndexPB& idx,
-                                               DeleteBitmap* delete_bitmap, bool full_sync) {
+                                               DeleteBitmap* delete_bitmap, bool full_sync,
+                                               SyncRowsetStats* sync_stats) {
     if (rs_metas.empty()) {
         return Status::OK();
     }
 
     if (!full_sync &&
         sync_tablet_delete_bitmap_by_cache(tablet, old_max_version, rs_metas, delete_bitmap)) {
+        if (sync_stats) {
+            sync_stats->get_local_delete_bitmap_rowsets_num += rs_metas.size();
+        }
         return Status::OK();
     } else {
         DeleteBitmapPtr new_delete_bitmap = std::make_shared<DeleteBitmap>(tablet->tablet_id());
@@ -788,6 +798,9 @@ Status CloudMetaMgr::sync_tablet_delete_bitmap(CloudTablet* tablet, int64_t old_
             req.add_end_versions(new_max_version);
         }
     }
+    if (sync_stats) {
+        sync_stats->get_remote_delete_bitmap_rowsets_num += req.rowset_ids_size();
+    }
 
     VLOG_DEBUG << "send GetDeleteBitmapRequest: " << req.ShortDebugString();
 
@@ -840,6 +853,14 @@ Status CloudMetaMgr::sync_tablet_delete_bitmap(CloudTablet* tablet, int64_t old_
                 "rowset_ids.size={},segment_ids.size={},vers.size={},delete_bitmaps.size={}",
                 rowset_ids.size(), segment_ids.size(), vers.size(), delete_bitmaps.size());
     }
+    if (sync_stats) {
+        sync_stats->get_remote_delete_bitmap_rpc_ms +=
+                std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count();
+        sync_stats->get_remote_delete_bitmap_key_count += delete_bitmaps.size();
+        for (const auto& dbm : delete_bitmaps) {
+            sync_stats->get_remote_delete_bitmap_bytes += dbm.length();
+        }
+    }
     for (int i = 0; i < rowset_ids.size(); i++) {
         RowsetId rst_id;
         rst_id.init(rowset_ids[i]);
diff --git a/be/src/cloud/cloud_meta_mgr.h b/be/src/cloud/cloud_meta_mgr.h
index 9f36d24e6d34f0..812a13c6b1f32f 100644
--- a/be/src/cloud/cloud_meta_mgr.h
+++ b/be/src/cloud/cloud_meta_mgr.h
@@ -63,7 +63,8 @@ class CloudMetaMgr {
 
     Status get_schema_dict(int64_t index_id, std::shared_ptr<SchemaCloudDictionary>* schema_dict);
 
-    Status sync_tablet_rowsets(CloudTablet* tablet, const SyncOptions& options = {});
+    Status sync_tablet_rowsets(CloudTablet* tablet, const SyncOptions& options = {},
+                               SyncRowsetStats* sync_stats = nullptr);
 
     Status prepare_rowset(const RowsetMeta& rs_meta,
                           std::shared_ptr<RowsetMeta>* existed_rs_meta = nullptr);
@@ -123,7 +124,7 @@ class CloudMetaMgr {
     Status sync_tablet_delete_bitmap(CloudTablet* tablet, int64_t old_max_version,
                                      std::ranges::range auto&& rs_metas, const TabletStatsPB& stats,
                                      const TabletIndexPB& idx, DeleteBitmap* delete_bitmap,
-                                     bool full_sync = false);
+                                     bool full_sync = false, SyncRowsetStats* sync_stats = nullptr);
     void check_table_size_correctness(const RowsetMeta& rs_meta);
     int64_t get_segment_file_size(const RowsetMeta& rs_meta);
     int64_t get_inverted_index_file_szie(const RowsetMeta& rs_meta);
diff --git a/be/src/cloud/cloud_storage_engine.cpp b/be/src/cloud/cloud_storage_engine.cpp
index 6ab46c288efc01..fc35d1b31847fc 100644
--- a/be/src/cloud/cloud_storage_engine.cpp
+++ b/be/src/cloud/cloud_storage_engine.cpp
@@ -235,8 +235,9 @@ bool CloudStorageEngine::stopped() {
     return _stopped;
 }
 
-Result<BaseTabletSPtr> CloudStorageEngine::get_tablet(int64_t tablet_id) {
-    return _tablet_mgr->get_tablet(tablet_id, false).transform([](auto&& t) {
+Result<BaseTabletSPtr> CloudStorageEngine::get_tablet(int64_t tablet_id,
+                                                      SyncRowsetStats* sync_stats) {
+    return _tablet_mgr->get_tablet(tablet_id, false, true, sync_stats).transform([](auto&& t) {
         return static_pointer_cast<BaseTablet>(std::move(t));
     });
 }
diff --git a/be/src/cloud/cloud_storage_engine.h b/be/src/cloud/cloud_storage_engine.h
index 899d613fe66d3c..2b04036eaabd3f 100644
--- a/be/src/cloud/cloud_storage_engine.h
+++ b/be/src/cloud/cloud_storage_engine.h
@@ -57,7 +57,8 @@ class CloudStorageEngine final : public BaseStorageEngine {
     void stop() override;
     bool stopped() override;
 
-    Result<BaseTabletSPtr> get_tablet(int64_t tablet_id) override;
+    Result<BaseTabletSPtr> get_tablet(int64_t tablet_id,
+                                      SyncRowsetStats* sync_stats = nullptr) override;
 
     Status start_bg_threads(std::shared_ptr<WorkloadGroup> wg_sptr = nullptr) override;
 
diff --git a/be/src/cloud/cloud_tablet.cpp b/be/src/cloud/cloud_tablet.cpp
index 0c538c3ff2208c..b0fe9af018deb1 100644
--- a/be/src/cloud/cloud_tablet.cpp
+++ b/be/src/cloud/cloud_tablet.cpp
@@ -144,8 +144,8 @@ Status CloudTablet::merge_rowsets_schema() {
 
 // There are only two tablet_states RUNNING and NOT_READY in cloud mode
 // This function will erase the tablet from `CloudTabletMgr` when it can't find this tablet in MS.
-Status CloudTablet::sync_rowsets(const SyncOptions& options) {
-    RETURN_IF_ERROR(sync_if_not_running());
+Status CloudTablet::sync_rowsets(const SyncOptions& options, SyncRowsetStats* stats) {
+    RETURN_IF_ERROR(sync_if_not_running(stats));
 
     if (options.query_version > 0) {
         std::shared_lock rlock(_meta_lock);
@@ -163,7 +163,7 @@ Status CloudTablet::sync_rowsets(const SyncOptions& options) {
         }
     }
 
-    auto st = _engine.meta_mgr().sync_tablet_rowsets(this, options);
+    auto st = _engine.meta_mgr().sync_tablet_rowsets(this, options, stats);
     if (st.is<ErrorCode::NOT_FOUND>()) {
         clear_cache();
     }
@@ -174,7 +174,7 @@ Status CloudTablet::sync_rowsets(const SyncOptions& options) {
 // Sync tablet meta and all rowset meta if not running.
 // This could happen when BE didn't finish schema change job and another BE committed this schema change job.
 // It should be a quite rare situation.
-Status CloudTablet::sync_if_not_running() {
+Status CloudTablet::sync_if_not_running(SyncRowsetStats* stats) {
     if (tablet_state() == TABLET_RUNNING) {
         return Status::OK();
     }
@@ -215,7 +215,7 @@ Status CloudTablet::sync_if_not_running() {
         _max_version = -1;
     }
 
-    st = _engine.meta_mgr().sync_tablet_rowsets(this);
+    st = _engine.meta_mgr().sync_tablet_rowsets(this, {}, stats);
     if (st.is<ErrorCode::NOT_FOUND>()) {
         clear_cache();
     }
diff --git a/be/src/cloud/cloud_tablet.h b/be/src/cloud/cloud_tablet.h
index bc8bc320aaa842..b6b43123984599 100644
--- a/be/src/cloud/cloud_tablet.h
+++ b/be/src/cloud/cloud_tablet.h
@@ -26,6 +26,17 @@ namespace doris {
 
 class CloudStorageEngine;
 
+struct SyncRowsetStats {
+    int64_t get_remote_rowsets_num {0};
+    int64_t get_remote_rowsets_rpc_ms {0};
+
+    int64_t get_local_delete_bitmap_rowsets_num {0};
+    int64_t get_remote_delete_bitmap_rowsets_num {0};
+    int64_t get_remote_delete_bitmap_key_count {0};
+    int64_t get_remote_delete_bitmap_bytes {0};
+    int64_t get_remote_delete_bitmap_rpc_ms {0};
+};
+
 struct SyncOptions {
     bool warmup_delta_data = false;
     bool sync_delete_bitmap = true;
@@ -76,7 +87,7 @@ class CloudTablet final : public BaseTablet {
     // If `query_version` > 0 and local max_version of the tablet >= `query_version`, do nothing.
     // If 'need_download_data_async' is true, it means that we need to download the new version
     // rowsets datum async.
-    Status sync_rowsets(const SyncOptions& options = {});
+    Status sync_rowsets(const SyncOptions& options = {}, SyncRowsetStats* stats = nullptr);
 
     // Synchronize the tablet meta from meta service.
     Status sync_meta();
@@ -228,7 +239,7 @@ class CloudTablet final : public BaseTablet {
     // FIXME(plat1ko): No need to record base size if rowsets are ordered by version
     void update_base_size(const Rowset& rs);
 
-    Status sync_if_not_running();
+    Status sync_if_not_running(SyncRowsetStats* stats = nullptr);
 
     CloudStorageEngine& _engine;
 
diff --git a/be/src/cloud/cloud_tablet_mgr.cpp b/be/src/cloud/cloud_tablet_mgr.cpp
index 9744626af6f19e..eae728f9526bda 100644
--- a/be/src/cloud/cloud_tablet_mgr.cpp
+++ b/be/src/cloud/cloud_tablet_mgr.cpp
@@ -150,7 +150,8 @@ void set_tablet_access_time_ms(CloudTablet* tablet) {
 }
 
 Result<std::shared_ptr<CloudTablet>> CloudTabletMgr::get_tablet(int64_t tablet_id, bool warmup_data,
-                                                                bool sync_delete_bitmap) {
+                                                                bool sync_delete_bitmap,
+                                                                SyncRowsetStats* sync_stats) {
     // LRU value type. `Value`'s lifetime MUST NOT be longer than `CloudTabletMgr`
     class Value : public LRUCacheValueBase {
     public:
@@ -168,8 +169,8 @@ Result<std::shared_ptr<CloudTablet>> CloudTabletMgr::get_tablet(int64_t tablet_i
     CacheKey key(tablet_id_str);
     auto* handle = _cache->lookup(key);
     if (handle == nullptr) {
-        auto load_tablet = [this, &key, warmup_data,
-                            sync_delete_bitmap](int64_t tablet_id) -> std::shared_ptr<CloudTablet> {
+        auto load_tablet = [this, &key, warmup_data, sync_delete_bitmap,
+                            sync_stats](int64_t tablet_id) -> std::shared_ptr<CloudTablet> {
             TabletMetaSharedPtr tablet_meta;
             auto st = _engine.meta_mgr().get_tablet_meta(tablet_id, &tablet_meta);
             if (!st.ok()) {
@@ -183,7 +184,7 @@ Result<std::shared_ptr<CloudTablet>> CloudTabletMgr::get_tablet(int64_t tablet_i
             SyncOptions options;
             options.warmup_delta_data = warmup_data;
             options.sync_delete_bitmap = sync_delete_bitmap;
-            st = _engine.meta_mgr().sync_tablet_rowsets(tablet.get(), options);
+            st = _engine.meta_mgr().sync_tablet_rowsets(tablet.get(), options, sync_stats);
             if (!st.ok()) {
                 LOG(WARNING) << "failed to sync tablet " << tablet_id << ": " << st;
                 return nullptr;
diff --git a/be/src/cloud/cloud_tablet_mgr.h b/be/src/cloud/cloud_tablet_mgr.h
index 409c2eb35a0854..1a6ec72c1f7625 100644
--- a/be/src/cloud/cloud_tablet_mgr.h
+++ b/be/src/cloud/cloud_tablet_mgr.h
@@ -33,6 +33,7 @@ class CloudTablet;
 class CloudStorageEngine;
 class LRUCachePolicy;
 class CountDownLatch;
+struct SyncRowsetStats;
 
 extern uint64_t g_tablet_report_inactive_duration_ms;
 
@@ -44,7 +45,8 @@ class CloudTabletMgr {
     // If the tablet is in cache, return this tablet directly; otherwise will get tablet meta first,
     // sync rowsets after, and download segment data in background if `warmup_data` is true.
     Result<std::shared_ptr<CloudTablet>> get_tablet(int64_t tablet_id, bool warmup_data = false,
-                                                    bool sync_delete_bitmap = true);
+                                                    bool sync_delete_bitmap = true,
+                                                    SyncRowsetStats* sync_stats = nullptr);
 
     void erase_tablet(int64_t tablet_id);
 
diff --git a/be/src/olap/storage_engine.cpp b/be/src/olap/storage_engine.cpp
index b5612f474cf62f..1290ca29090dba 100644
--- a/be/src/olap/storage_engine.cpp
+++ b/be/src/olap/storage_engine.cpp
@@ -1268,7 +1268,7 @@ Status StorageEngine::create_tablet(const TCreateTabletReq& request, RuntimeProf
     return _tablet_manager->create_tablet(request, stores, profile);
 }
 
-Result<BaseTabletSPtr> StorageEngine::get_tablet(int64_t tablet_id) {
+Result<BaseTabletSPtr> StorageEngine::get_tablet(int64_t tablet_id, SyncRowsetStats* sync_stats) {
     BaseTabletSPtr tablet;
     std::string err;
     tablet = _tablet_manager->get_tablet(tablet_id, true, &err);
diff --git a/be/src/olap/storage_engine.h b/be/src/olap/storage_engine.h
index 71bc1713d39c8f..f4999674c90ceb 100644
--- a/be/src/olap/storage_engine.h
+++ b/be/src/olap/storage_engine.h
@@ -109,7 +109,8 @@ class BaseStorageEngine {
     // start all background threads. This should be call after env is ready.
     virtual Status start_bg_threads(std::shared_ptr<WorkloadGroup> wg_sptr = nullptr) = 0;
 
-    virtual Result<BaseTabletSPtr> get_tablet(int64_t tablet_id) = 0;
+    virtual Result<BaseTabletSPtr> get_tablet(int64_t tablet_id,
+                                              SyncRowsetStats* sync_stats = nullptr) = 0;
 
     void register_report_listener(ReportWorker* listener);
     void deregister_report_listener(ReportWorker* listener);
@@ -227,7 +228,8 @@ class StorageEngine final : public BaseStorageEngine {
 
     Status create_tablet(const TCreateTabletReq& request, RuntimeProfile* profile);
 
-    Result<BaseTabletSPtr> get_tablet(int64_t tablet_id) override;
+    Result<BaseTabletSPtr> get_tablet(int64_t tablet_id,
+                                      SyncRowsetStats* sync_stats = nullptr) override;
 
     void clear_transaction_task(const TTransactionId transaction_id);
     void clear_transaction_task(const TTransactionId transaction_id,
diff --git a/be/src/pipeline/exec/olap_scan_operator.cpp b/be/src/pipeline/exec/olap_scan_operator.cpp
index b93c22274d90d5..cd6ffdc1a42040 100644
--- a/be/src/pipeline/exec/olap_scan_operator.cpp
+++ b/be/src/pipeline/exec/olap_scan_operator.cpp
@@ -33,6 +33,7 @@
 #include "pipeline/query_cache/query_cache.h"
 #include "runtime_filter/runtime_filter_consumer_helper.h"
 #include "service/backend_options.h"
+#include "util/runtime_profile.h"
 #include "util/to_string.h"
 #include "vec/exec/scan/olap_scanner.h"
 #include "vec/exprs/vectorized_fn_call.h"
@@ -65,7 +66,29 @@ Status OlapScanLocalState::_init_profile() {
     _block_fetch_timer = ADD_TIMER(_scanner_profile, "BlockFetchTime");
     _delete_bitmap_get_agg_timer = ADD_TIMER(_scanner_profile, "DeleteBitmapGetAggTime");
     if (config::is_cloud_mode()) {
-        _sync_rowset_timer = ADD_TIMER(_scanner_profile, "SyncRowsetTime");
+        static const char* sync_rowset_timer_name = "SyncRowsetTime";
+        _sync_rowset_timer = ADD_TIMER(_scanner_profile, sync_rowset_timer_name);
+        _sync_rowset_get_remote_rowsets_num =
+                ADD_CHILD_COUNTER(_scanner_profile, "SyncRowsetGetRemoteRowsetsCount", TUnit::UNIT,
+                                  sync_rowset_timer_name);
+        _sync_rowset_get_remote_rowsets_rpc_timer =
+                ADD_CHILD_COUNTER(_scanner_profile, "SyncRowsetGetRemoteRowsetsRpcMs",
+                                  TUnit::TIME_MS, sync_rowset_timer_name);
+        _sync_rowset_get_local_delete_bitmap_rowsets_num =
+                ADD_CHILD_COUNTER(_scanner_profile, "SyncRowsetGetLocalDeleteBitmapRowsetsCount",
+                                  TUnit::UNIT, sync_rowset_timer_name);
+        _sync_rowset_get_remote_delete_bitmap_rowsets_num =
+                ADD_CHILD_COUNTER(_scanner_profile, "SyncRowsetGetRemoteDeleteBitmapRowsetsCount",
+                                  TUnit::UNIT, sync_rowset_timer_name);
+        _sync_rowset_get_remote_delete_bitmap_key_count =
+                ADD_CHILD_COUNTER(_scanner_profile, "SyncRowsetGetRemoteDeleteBitmapKeyCount",
+                                  TUnit::UNIT, sync_rowset_timer_name);
+        _sync_rowset_get_remote_delete_bitmap_bytes =
+                ADD_CHILD_COUNTER(_scanner_profile, "SyncRowsetGetRemoteDeleteBitmapBytes",
+                                  TUnit::BYTES, sync_rowset_timer_name);
+        _sync_rowset_get_remote_delete_bitmap_rpc_timer =
+                ADD_CHILD_COUNTER(_scanner_profile, "SyncRowsetGetRemoteDeleteBitmapRpcMs",
+                                  TUnit::TIME_MS, sync_rowset_timer_name);
     }
     _block_init_timer = ADD_TIMER(_segment_profile, "BlockInitTime");
     _block_init_seek_timer = ADD_TIMER(_segment_profile, "BlockInitSeekTime");
@@ -419,6 +442,23 @@ Status OlapScanLocalState::hold_tablets() {
     if (!_tablets.empty()) {
         return Status::OK();
     }
+
+    auto update_sync_rowset_profile = [&](const SyncRowsetStats& sync_stat) {
+        COUNTER_UPDATE(_sync_rowset_get_remote_rowsets_num, sync_stat.get_remote_rowsets_num);
+        COUNTER_UPDATE(_sync_rowset_get_remote_rowsets_rpc_timer,
+                       sync_stat.get_remote_rowsets_rpc_ms);
+        COUNTER_UPDATE(_sync_rowset_get_local_delete_bitmap_rowsets_num,
+                       sync_stat.get_local_delete_bitmap_rowsets_num);
+        COUNTER_UPDATE(_sync_rowset_get_remote_delete_bitmap_rowsets_num,
+                       sync_stat.get_remote_delete_bitmap_rowsets_num);
+        COUNTER_UPDATE(_sync_rowset_get_remote_delete_bitmap_key_count,
+                       sync_stat.get_remote_delete_bitmap_key_count);
+        COUNTER_UPDATE(_sync_rowset_get_remote_delete_bitmap_bytes,
+                       sync_stat.get_remote_delete_bitmap_bytes);
+        COUNTER_UPDATE(_sync_rowset_get_remote_delete_bitmap_rpc_timer,
+                       sync_stat.get_remote_delete_bitmap_rpc_ms);
+    };
+
     MonotonicStopWatch timer;
     timer.start();
     _tablets.resize(_scan_ranges.size());
@@ -427,34 +467,51 @@ Status OlapScanLocalState::hold_tablets() {
         int64_t version = 0;
         std::from_chars(_scan_ranges[i]->version.data(),
                         _scan_ranges[i]->version.data() + _scan_ranges[i]->version.size(), version);
-        auto tablet = DORIS_TRY(ExecEnv::get_tablet(_scan_ranges[i]->tablet_id));
-        _tablets[i] = {std::move(tablet), version};
-
         if (config::is_cloud_mode()) {
+            int64_t duration_ns = 0;
+            SyncRowsetStats sync_stats;
+            {
+                SCOPED_RAW_TIMER(&duration_ns);
+                auto tablet =
+                        DORIS_TRY(ExecEnv::get_tablet(_scan_ranges[i]->tablet_id, &sync_stats));
+                _tablets[i] = {std::move(tablet), version};
+            }
+            COUNTER_UPDATE(_sync_rowset_timer, duration_ns);
+            update_sync_rowset_profile(sync_stats);
+
             // FIXME(plat1ko): Avoid pointer cast
             ExecEnv::GetInstance()->storage_engine().to_cloud().tablet_hotspot().count(
                     *_tablets[i].tablet);
+        } else {
+            auto tablet = DORIS_TRY(ExecEnv::get_tablet(_scan_ranges[i]->tablet_id));
+            _tablets[i] = {std::move(tablet), version};
         }
     }
 
     if (config::is_cloud_mode()) {
         int64_t duration_ns = 0;
+        std::vector<SyncRowsetStats> sync_statistics {};
+        sync_statistics.reserve(_tablets.size());
         {
             SCOPED_RAW_TIMER(&duration_ns);
             std::vector<std::function<Status()>> tasks;
             tasks.reserve(_scan_ranges.size());
             for (auto&& [cur_tablet, cur_version] : _tablets) {
-                tasks.emplace_back([cur_tablet, cur_version]() {
+                sync_statistics.emplace_back();
+                tasks.emplace_back([cur_tablet, cur_version, stats = &sync_statistics.back()]() {
                     SyncOptions options;
                     options.query_version = cur_version;
                     options.merge_schema = true;
                     return std::dynamic_pointer_cast<CloudTablet>(cur_tablet)
-                            ->sync_rowsets(options);
+                            ->sync_rowsets(options, stats);
                 });
             }
             RETURN_IF_ERROR(cloud::bthread_fork_join(tasks, 10));
         }
-        _sync_rowset_timer->update(duration_ns);
+        COUNTER_UPDATE(_sync_rowset_timer, duration_ns);
+        for (const auto& sync_stats : sync_statistics) {
+            update_sync_rowset_profile(sync_stats);
+        }
     }
     for (size_t i = 0; i < _scan_ranges.size(); i++) {
         RETURN_IF_ERROR(_tablets[i].tablet->capture_rs_readers({0, _tablets[i].version},
diff --git a/be/src/pipeline/exec/olap_scan_operator.h b/be/src/pipeline/exec/olap_scan_operator.h
index f6275df046e515..1800c00b6e071b 100644
--- a/be/src/pipeline/exec/olap_scan_operator.h
+++ b/be/src/pipeline/exec/olap_scan_operator.h
@@ -135,6 +135,13 @@ class OlapScanLocalState final : public ScanLocalState<OlapScanLocalState> {
     RuntimeProfile::Counter* _block_fetch_timer = nullptr;
     RuntimeProfile::Counter* _delete_bitmap_get_agg_timer = nullptr;
     RuntimeProfile::Counter* _sync_rowset_timer = nullptr;
+    RuntimeProfile::Counter* _sync_rowset_get_remote_rowsets_num = nullptr;
+    RuntimeProfile::Counter* _sync_rowset_get_remote_rowsets_rpc_timer = nullptr;
+    RuntimeProfile::Counter* _sync_rowset_get_local_delete_bitmap_rowsets_num = nullptr;
+    RuntimeProfile::Counter* _sync_rowset_get_remote_delete_bitmap_rowsets_num = nullptr;
+    RuntimeProfile::Counter* _sync_rowset_get_remote_delete_bitmap_key_count = nullptr;
+    RuntimeProfile::Counter* _sync_rowset_get_remote_delete_bitmap_bytes = nullptr;
+    RuntimeProfile::Counter* _sync_rowset_get_remote_delete_bitmap_rpc_timer = nullptr;
     RuntimeProfile::Counter* _block_load_timer = nullptr;
     RuntimeProfile::Counter* _block_load_counter = nullptr;
     // Add more detail seek timer and counter profile
diff --git a/be/src/runtime/exec_env.cpp b/be/src/runtime/exec_env.cpp
index 7ac719dbf99289..a6e41debfca78d 100644
--- a/be/src/runtime/exec_env.cpp
+++ b/be/src/runtime/exec_env.cpp
@@ -52,10 +52,10 @@ void ExecEnv::set_write_cooldown_meta_executors() {
 }
 #endif // BE_TEST
 
-Result<BaseTabletSPtr> ExecEnv::get_tablet(int64_t tablet_id) {
+Result<BaseTabletSPtr> ExecEnv::get_tablet(int64_t tablet_id, SyncRowsetStats* sync_stats) {
     auto storage_engine = GetInstance()->_storage_engine.get();
     return storage_engine != nullptr
-                   ? storage_engine->get_tablet(tablet_id)
+                   ? storage_engine->get_tablet(tablet_id, sync_stats)
                    : ResultError(Status::InternalError("failed to get tablet {}", tablet_id));
 }
 
diff --git a/be/src/runtime/exec_env.h b/be/src/runtime/exec_env.h
index 8ee7da69e4d134..aa0c259d00a14a 100644
--- a/be/src/runtime/exec_env.h
+++ b/be/src/runtime/exec_env.h
@@ -119,6 +119,7 @@ class ProcessProfile;
 class HeapProfiler;
 class WalManager;
 class DNSCache;
+struct SyncRowsetStats;
 
 inline bool k_doris_exit = false;
 
@@ -151,7 +152,8 @@ class ExecEnv {
     }
 
     // Requires ExenEnv ready
-    static Result<BaseTabletSPtr> get_tablet(int64_t tablet_id);
+    static Result<BaseTabletSPtr> get_tablet(int64_t tablet_id,
+                                             SyncRowsetStats* sync_stats = nullptr);
 
     static bool ready() { return _s_ready.load(std::memory_order_acquire); }
     static bool tracking_memory() { return _s_tracking_memory.load(std::memory_order_acquire); }


Reviews:
user: login: gavinchou
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-08T08:58:55Z
user: login: gavinchou
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-08T08:59:47Z
user: login: dataroaring
body: LGTM
state: APPROVED
author_association: CONTRIBUTOR
submitted_at: 2025-04-08T13:34:28Z
user: login: zhannngchen
body: LGTM
state: APPROVED
author_association: CONTRIBUTOR
submitted_at: 2025-04-08T13:43:13Z

Review comments:
diff_hunk: @@ -26,6 +26,17 @@ namespace doris {
 
 class CloudStorageEngine;
 
+struct SyncStatistics {
path: be/src/cloud/cloud_tablet.h
user: login: gavinchou
body: sugguest naming `SyncRowsetStats`
created_at: 2025-04-08T08:58:55Z
author_association: CONTRIBUTOR
diff_hunk: @@ -26,6 +26,17 @@ namespace doris {
 
 class CloudStorageEngine;
 
+struct SyncStatistics {
path: be/src/cloud/cloud_tablet.h
user: login: gavinchou
body: is it better to make this struct as a member of SyncOption
created_at: 2025-04-08T08:59:46Z
author_association: CONTRIBUTOR

PR comments:
user: login: Thearas
created_at: 2025-04-08T03:37:38Z
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: bobhan1
created_at: 2025-04-08T03:44:38Z
body: run buildall
author_association: CONTRIBUTOR
user: login: doris-robot
created_at: 2025-04-08T04:27:48Z
body: 
<details>
<summary>TPC-H: <b>Total hot run time: 35224 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 0e79c4f86086266e6e97913106f24df9b67c0f8c, data reload: false

------ Round 1 ----------------------------------
q1	26167	5033	5041	5033
q2	2067	278	183	183
q3	10605	1261	689	689
q4	10268	1025	526	526
q5	8039	2374	2406	2374
q6	194	164	135	135
q7	937	745	615	615
q8	9337	1360	1161	1161
q9	6828	5166	5129	5129
q10	6823	2307	1899	1899
q11	477	290	270	270
q12	351	362	213	213
q13	17793	3682	3087	3087
q14	229	232	209	209
q15	535	484	484	484
q16	649	626	581	581
q17	603	871	377	377
q18	7669	7227	7226	7226
q19	1330	960	550	550
q20	342	334	224	224
q21	4449	3541	3314	3314
q22	1013	1024	945	945
Total cold run time: 116705 ms
Total hot run time: 35224 ms

----- Round 2, with runtime_filter_mode=off -----
q1	5154	5090	5136	5090
q2	233	324	224	224
q3	2206	2671	2304	2304
q4	1416	2020	1518	1518
q5	4613	4453	4343	4343
q6	222	161	124	124
q7	1990	1892	1729	1729
q8	2633	2642	2481	2481
q9	7155	7148	7082	7082
q10	3026	3182	2749	2749
q11	614	512	482	482
q12	663	757	593	593
q13	3544	3895	3274	3274
q14	275	282	274	274
q15	504	474	461	461
q16	638	690	666	666
q17	1159	1602	1400	1400
q18	7692	7581	7416	7416
q19	824	886	932	886
q20	1968	1999	1864	1864
q21	5192	4728	4750	4728
q22	1063	1018	984	984
Total cold run time: 52784 ms
Total hot run time: 50672 ms
```
</details>

author_association: NONE
user: login: doris-robot
created_at: 2025-04-08T04:39:17Z
body: 
<details>
<summary>TPC-DS: <b>Total hot run time: 185372 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 0e79c4f86086266e6e97913106f24df9b67c0f8c, data reload: false

query1	1017	495	476	476
query2	6531	1903	1896	1896
query3	6746	227	220	220
query4	25791	23378	22789	22789
query5	4366	623	458	458
query6	303	206	203	203
query7	4755	486	309	309
query8	313	261	244	244
query9	8608	2555	2568	2555
query10	459	308	259	259
query11	15827	15118	14846	14846
query12	172	104	106	104
query13	1660	545	385	385
query14	9990	6194	6208	6194
query15	213	182	168	168
query16	7662	641	474	474
query17	1186	721	554	554
query18	2020	413	307	307
query19	186	174	157	157
query20	118	119	113	113
query21	212	120	106	106
query22	4007	4090	3924	3924
query23	33749	32808	32914	32808
query24	8288	2343	2388	2343
query25	498	465	394	394
query26	1222	269	161	161
query27	2751	543	340	340
query28	4349	2387	2397	2387
query29	724	561	428	428
query30	286	224	192	192
query31	939	873	820	820
query32	70	70	67	67
query33	556	363	313	313
query34	785	837	514	514
query35	800	815	750	750
query36	936	1024	881	881
query37	117	98	72	72
query38	4213	4274	4062	4062
query39	1448	1380	1380	1380
query40	212	125	107	107
query41	54	57	53	53
query42	119	111	103	103
query43	487	503	472	472
query44	1315	789	793	789
query45	185	171	168	168
query46	831	1015	623	623
query47	1771	1830	1749	1749
query48	381	409	317	317
query49	788	498	430	430
query50	651	672	396	396
query51	4139	4173	4061	4061
query52	114	124	98	98
query53	218	254	184	184
query54	572	570	508	508
query55	83	82	84	82
query56	326	311	299	299
query57	1106	1152	1067	1067
query58	303	263	260	260
query59	2627	2676	2629	2629
query60	327	313	296	296
query61	134	131	129	129
query62	794	722	664	664
query63	219	189	186	186
query64	4259	1053	813	813
query65	4303	4207	4251	4207
query66	1089	488	313	313
query67	15572	15334	15173	15173
query68	6874	821	518	518
query69	472	321	267	267
query70	1199	1083	1094	1083
query71	419	329	296	296
query72	5504	4783	4836	4783
query73	664	630	349	349
query74	9125	9067	8602	8602
query75	3239	3256	2719	2719
query76	3255	1197	758	758
query77	486	386	299	299
query78	10034	10661	9332	9332
query79	1470	826	563	563
query80	624	541	471	471
query81	493	258	235	235
query82	210	132	101	101
query83	270	264	249	249
query84	374	104	83	83
query85	745	351	315	315
query86	377	296	305	296
query87	4342	4467	4248	4248
query88	2867	2255	2234	2234
query89	391	311	283	283
query90	1932	216	218	216
query91	152	248	110	110
query92	74	65	58	58
query93	1584	968	577	577
query94	672	414	285	285
query95	372	294	291	291
query96	490	571	275	275
query97	3114	3205	3186	3186
query98	220	212	202	202
query99	1335	1429	1259	1259
Total cold run time: 270231 ms
Total hot run time: 185372 ms
```
</details>

author_association: NONE
user: login: doris-robot
created_at: 2025-04-08T04:44:36Z
body: 
<details>
<summary>ClickBench: <b>Total hot run time: 31.37 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 0e79c4f86086266e6e97913106f24df9b67c0f8c, data reload: false

query1	0.04	0.04	0.04
query2	0.12	0.10	0.11
query3	0.26	0.19	0.19
query4	1.59	0.20	0.19
query5	0.58	0.56	0.57
query6	1.18	0.72	0.73
query7	0.02	0.01	0.01
query8	0.04	0.04	0.03
query9	0.58	0.52	0.52
query10	0.57	0.60	0.57
query11	0.15	0.10	0.11
query12	0.14	0.12	0.11
query13	0.62	0.61	0.61
query14	2.68	2.80	2.87
query15	0.94	0.86	0.84
query16	0.39	0.40	0.38
query17	1.02	1.04	1.07
query18	0.21	0.19	0.19
query19	1.90	1.98	1.81
query20	0.01	0.01	0.01
query21	15.36	0.95	0.57
query22	0.74	1.08	0.71
query23	14.98	1.38	0.58
query24	7.11	1.44	0.88
query25	0.52	0.22	0.13
query26	0.57	0.16	0.14
query27	0.05	0.05	0.04
query28	9.91	0.86	0.43
query29	12.53	4.06	3.38
query30	0.25	0.09	0.06
query31	2.84	0.58	0.39
query32	3.23	0.56	0.46
query33	3.08	3.22	3.03
query34	15.72	5.06	4.51
query35	4.52	4.53	4.45
query36	0.68	0.50	0.49
query37	0.09	0.07	0.06
query38	0.05	0.04	0.03
query39	0.03	0.02	0.02
query40	0.17	0.13	0.12
query41	0.08	0.03	0.02
query42	0.03	0.02	0.02
query43	0.03	0.03	0.03
Total cold run time: 105.61 s
Total hot run time: 31.37 s
```
</details>

author_association: NONE
user: login: hello-stephen
created_at: 2025-04-08T06:29:35Z
body: # BE UT Coverage Report
Increment line coverage `0.00% (0/58)` :tada:

[Increment coverage report](http://coverage.selectdb-in.cc/coverage/0e79c4f86086266e6e97913106f24df9b67c0f8c_0e79c4f86086266e6e97913106f24df9b67c0f8c/increment_report/index.html)
[Complete coverage report](http://coverage.selectdb-in.cc/coverage/0e79c4f86086266e6e97913106f24df9b67c0f8c_0e79c4f86086266e6e97913106f24df9b67c0f8c/report/index.html)
| Category          | Coverage           |
|-------------------|--------------------|
| Function Coverage | 52.26% (14031/26849) |
| Line Coverage     | 41.02% (121037/295045) |
| Region Coverage   | 39.77% (61612/154907) |
| Branch Coverage   | 34.44% (30839/89540) |
author_association: CONTRIBUTOR
user: login: bobhan1
created_at: 2025-04-08T07:38:14Z
body: run buildall
author_association: CONTRIBUTOR
user: login: bobhan1
created_at: 2025-04-08T08:29:36Z
body: run buildall
author_association: CONTRIBUTOR
user: login: doris-robot
created_at: 2025-04-08T09:41:23Z
body: 
<details>
<summary>TPC-H: <b>Total hot run time: 34068 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 ba3ea8b1500254014b444f7a0e6ec9d7f01271de, data reload: false

------ Round 1 ----------------------------------
q1	26181	5023	4986	4986
q2	2080	283	188	188
q3	10378	1233	676	676
q4	10234	1018	539	539
q5	7542	2331	2422	2331
q6	183	158	130	130
q7	928	748	615	615
q8	9313	1351	1084	1084
q9	6845	5123	5136	5123
q10	6809	2311	1876	1876
q11	487	280	268	268
q12	345	355	219	219
q13	17762	3645	3046	3046
q14	231	227	218	218
q15	534	475	478	475
q16	655	633	583	583
q17	578	855	352	352
q18	7739	7250	7184	7184
q19	1216	969	563	563
q20	335	326	218	218
q21	3954	3314	2423	2423
q22	1039	1005	971	971
Total cold run time: 115368 ms
Total hot run time: 34068 ms

----- Round 2, with runtime_filter_mode=off -----
q1	5110	5095	5100	5095
q2	237	326	228	228
q3	2168	2674	2262	2262
q4	1454	1869	1394	1394
q5	4566	4490	4371	4371
q6	211	165	124	124
q7	1989	1889	1723	1723
q8	2583	2578	2521	2521
q9	7254	7203	7117	7117
q10	3027	3186	2718	2718
q11	581	525	478	478
q12	690	772	628	628
q13	3573	3919	3242	3242
q14	290	283	263	263
q15	513	488	463	463
q16	624	667	651	651
q17	1175	1590	1370	1370
q18	7618	7533	7556	7533
q19	791	829	863	829
q20	1989	2039	1897	1897
q21	5206	4720	4540	4540
q22	1040	1022	996	996
Total cold run time: 52689 ms
Total hot run time: 50443 ms
```
</details>

author_association: NONE
user: login: doris-robot
created_at: 2025-04-08T09:53:01Z
body: 
<details>
<summary>TPC-DS: <b>Total hot run time: 186545 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 ba3ea8b1500254014b444f7a0e6ec9d7f01271de, data reload: false

query1	1034	481	507	481
query2	6555	2031	1954	1954
query3	6744	223	212	212
query4	26210	23286	23333	23286
query5	4350	631	466	466
query6	311	206	198	198
query7	4626	495	283	283
query8	292	246	238	238
query9	8616	2602	2591	2591
query10	492	319	284	284
query11	15801	15482	14819	14819
query12	175	112	118	112
query13	1660	526	403	403
query14	10921	6201	6143	6143
query15	220	183	166	166
query16	7644	665	489	489
query17	1572	731	558	558
query18	2024	392	294	294
query19	186	177	151	151
query20	122	118	118	118
query21	211	125	104	104
query22	4045	4356	4263	4263
query23	33930	33264	33013	33013
query24	8104	2348	2332	2332
query25	522	440	391	391
query26	1227	281	157	157
query27	2722	508	326	326
query28	4309	2398	2380	2380
query29	724	553	427	427
query30	290	220	191	191
query31	946	862	749	749
query32	73	65	62	62
query33	556	354	319	319
query34	797	858	512	512
query35	814	834	761	761
query36	947	980	896	896
query37	117	100	75	75
query38	4173	4158	4137	4137
query39	1484	1393	1394	1393
query40	214	123	140	123
query41	58	51	51	51
query42	115	104	105	104
query43	502	500	480	480
query44	1291	799	793	793
query45	179	173	167	167
query46	844	1028	618	618
query47	1748	1788	1721	1721
query48	361	425	300	300
query49	752	526	403	403
query50	625	680	393	393
query51	4154	4298	4040	4040
query52	107	105	99	99
query53	223	244	177	177
query54	567	572	497	497
query55	83	80	79	79
query56	308	287	291	287
query57	1157	1131	1075	1075
query58	266	265	270	265
query59	2731	2865	2658	2658
query60	340	315	298	298
query61	131	126	130	126
query62	796	732	636	636
query63	230	185	187	185
query64	4287	1020	685	685
query65	4354	4222	4231	4222
query66	1056	415	307	307
query67	15696	15713	15370	15370
query68	7838	892	519	519
query69	463	296	259	259
query70	1192	1146	1048	1048
query71	475	314	286	286
query72	5526	4770	5097	4770
query73	722	661	344	344
query74	9266	8917	8968	8917
query75	3864	3195	2716	2716
query76	3664	1178	743	743
query77	788	436	294	294
query78	9845	10209	9218	9218
query79	2223	815	564	564
query80	574	510	443	443
query81	486	265	224	224
query82	211	127	101	101
query83	258	257	244	244
query84	245	107	89	89
query85	885	349	312	312
query86	379	301	286	286
query87	4327	4424	4420	4420
query88	3700	2214	2214	2214
query89	381	304	279	279
query90	1880	213	215	213
query91	143	147	115	115
query92	80	63	59	59
query93	1890	965	570	570
query94	623	411	268	268
query95	382	292	285	285
query96	483	565	276	276
query97	3072	3258	3091	3091
query98	234	219	204	204
query99	1355	1392	1281	1281
Total cold run time: 276175 ms
Total hot run time: 186545 ms
```
</details>

author_association: NONE
user: login: doris-robot
created_at: 2025-04-08T09:58:21Z
body: 
<details>
<summary>ClickBench: <b>Total hot run time: 30.77 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 ba3ea8b1500254014b444f7a0e6ec9d7f01271de, data reload: false

query1	0.04	0.04	0.03
query2	0.11	0.10	0.11
query3	0.24	0.20	0.20
query4	1.59	0.19	0.19
query5	0.56	0.55	0.57
query6	1.20	0.71	0.72
query7	0.02	0.02	0.01
query8	0.04	0.04	0.04
query9	0.58	0.53	0.53
query10	0.59	0.60	0.58
query11	0.16	0.11	0.10
query12	0.14	0.11	0.11
query13	0.61	0.60	0.59
query14	2.69	2.69	2.70
query15	0.94	0.86	0.83
query16	0.39	0.38	0.39
query17	1.06	1.04	1.06
query18	0.22	0.20	0.19
query19	2.04	1.91	1.82
query20	0.02	0.01	0.01
query21	15.37	0.89	0.54
query22	0.76	1.22	0.60
query23	14.97	1.42	0.65
query24	7.64	1.30	0.47
query25	0.52	0.19	0.15
query26	0.66	0.16	0.14
query27	0.05	0.05	0.05
query28	9.64	0.88	0.42
query29	12.54	3.93	3.33
query30	0.24	0.08	0.06
query31	2.83	0.60	0.38
query32	3.23	0.54	0.46
query33	3.16	3.10	3.04
query34	15.71	5.09	4.48
query35	4.50	4.59	4.51
query36	0.66	0.50	0.48
query37	0.09	0.06	0.06
query38	0.04	0.04	0.03
query39	0.03	0.02	0.02
query40	0.16	0.14	0.13
query41	0.09	0.03	0.02
query42	0.04	0.02	0.02
query43	0.03	0.03	0.03
Total cold run time: 106.2 s
Total hot run time: 30.77 s
```
</details>

author_association: NONE
user: login: bobhan1
created_at: 2025-04-08T10:20:25Z
body: run buildall
author_association: CONTRIBUTOR
user: login: doris-robot
created_at: 2025-04-08T11:38:46Z
body: 
<details>
<summary>TPC-H: <b>Total hot run time: 34619 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 e14b70ba2c97185e2832eb8b284bc298693a2177, data reload: false

------ Round 1 ----------------------------------
q1	26187	5052	5082	5052
q2	2071	272	177	177
q3	10401	1254	703	703
q4	10214	1018	533	533
q5	7514	2384	2402	2384
q6	191	163	133	133
q7	928	735	613	613
q8	9307	1334	1145	1145
q9	6825	5167	5114	5114
q10	6812	2324	1893	1893
q11	478	295	292	292
q12	356	359	222	222
q13	17761	3667	3080	3080
q14	233	229	213	213
q15	537	492	496	492
q16	619	601	583	583
q17	604	880	397	397
q18	8079	7314	7171	7171
q19	1953	972	608	608
q20	347	340	238	238
q21	4578	3463	2585	2585
q22	1079	1027	991	991
Total cold run time: 117074 ms
Total hot run time: 34619 ms

----- Round 2, with runtime_filter_mode=off -----
q1	5166	5126	5094	5094
q2	250	333	235	235
q3	2171	2640	2288	2288
q4	1460	1833	1406	1406
q5	4268	4142	4139	4139
q6	202	168	127	127
q7	1863	1884	1707	1707
q8	2547	2565	2480	2480
q9	6872	6810	6770	6770
q10	2871	3064	2640	2640
q11	581	506	485	485
q12	647	745	580	580
q13	3306	3674	3113	3113
q14	276	279	255	255
q15	507	470	455	455
q16	645	677	647	647
q17	1121	1502	1373	1373
q18	7506	7204	7236	7204
q19	775	766	783	766
q20	1905	2021	1804	1804
q21	5106	4664	4623	4623
q22	1104	1037	997	997
Total cold run time: 51149 ms
Total hot run time: 49188 ms
```
</details>

author_association: NONE
user: login: doris-robot
created_at: 2025-04-08T11:50:21Z
body: 
<details>
<summary>TPC-DS: <b>Total hot run time: 185788 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 e14b70ba2c97185e2832eb8b284bc298693a2177, data reload: false

query1	1011	466	463	463
query2	6549	1949	1959	1949
query3	6738	217	223	217
query4	25753	23191	22866	22866
query5	4423	637	460	460
query6	308	221	204	204
query7	4622	486	286	286
query8	303	245	242	242
query9	8648	2618	2597	2597
query10	469	336	268	268
query11	15438	15150	14837	14837
query12	176	108	106	106
query13	1670	514	433	433
query14	9937	6165	6142	6142
query15	201	190	160	160
query16	7663	645	472	472
query17	1324	699	592	592
query18	2009	390	299	299
query19	183	182	152	152
query20	117	120	120	120
query21	209	120	102	102
query22	4233	4369	4176	4176
query23	33933	32806	32981	32806
query24	8368	2407	2369	2369
query25	532	462	399	399
query26	1233	268	152	152
query27	2731	498	336	336
query28	4346	2405	2402	2402
query29	720	559	452	452
query30	321	220	188	188
query31	957	882	764	764
query32	77	61	66	61
query33	555	378	321	321
query34	782	845	535	535
query35	808	833	742	742
query36	937	993	863	863
query37	123	146	77	77
query38	4071	4155	4028	4028
query39	1458	1399	1410	1399
query40	206	127	109	109
query41	60	56	56	56
query42	120	104	107	104
query43	494	502	483	483
query44	1290	806	799	799
query45	179	172	165	165
query46	819	1014	624	624
query47	1758	1802	1695	1695
query48	387	407	303	303
query49	781	492	409	409
query50	641	690	412	412
query51	4146	4173	4134	4134
query52	101	102	104	102
query53	225	259	186	186
query54	571	583	500	500
query55	83	85	84	84
query56	301	300	283	283
query57	1114	1130	1059	1059
query58	262	253	258	253
query59	2709	2704	2612	2612
query60	324	323	309	309
query61	139	133	132	132
query62	809	714	648	648
query63	225	185	199	185
query64	4252	1077	721	721
query65	4335	4209	4198	4198
query66	1068	418	311	311
query67	15892	15572	15213	15213
query68	7942	815	512	512
query69	458	307	264	264
query70	1171	1116	1131	1116
query71	438	315	293	293
query72	5743	4867	5020	4867
query73	673	688	348	348
query74	9161	8867	8672	8672
query75	3465	3195	2731	2731
query76	3306	1183	740	740
query77	691	365	295	295
query78	10672	10197	9238	9238
query79	2279	785	575	575
query80	646	521	449	449
query81	493	251	228	228
query82	218	129	93	93
query83	278	252	233	233
query84	244	113	91	91
query85	748	378	311	311
query86	377	306	306	306
query87	4463	4616	4356	4356
query88	3436	2224	2214	2214
query89	393	313	282	282
query90	1990	215	216	215
query91	139	150	111	111
query92	79	65	59	59
query93	2243	932	569	569
query94	665	399	294	294
query95	380	353	291	291
query96	493	569	272	272
query97	3134	3192	3163	3163
query98	243	210	203	203
query99	1329	1431	1271	1271
Total cold run time: 275217 ms
Total hot run time: 185788 ms
```
</details>

author_association: NONE
user: login: doris-robot
created_at: 2025-04-08T11:55:40Z
body: 
<details>
<summary>ClickBench: <b>Total hot run time: 31.47 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 e14b70ba2c97185e2832eb8b284bc298693a2177, data reload: false

query1	0.04	0.04	0.03
query2	0.11	0.11	0.11
query3	0.25	0.20	0.20
query4	1.60	0.20	0.19
query5	0.59	0.58	0.60
query6	1.19	0.72	0.70
query7	0.02	0.02	0.02
query8	0.04	0.03	0.03
query9	0.58	0.51	0.51
query10	0.59	0.58	0.56
query11	0.15	0.11	0.11
query12	0.15	0.11	0.11
query13	0.61	0.61	0.61
query14	2.66	2.72	2.70
query15	0.92	0.83	0.85
query16	0.38	0.37	0.38
query17	1.00	1.01	1.04
query18	0.21	0.19	0.19
query19	1.87	1.90	1.86
query20	0.02	0.01	0.01
query21	15.36	0.93	0.56
query22	0.76	1.24	0.73
query23	14.81	1.36	0.60
query24	6.62	2.40	1.01
query25	0.46	0.22	0.09
query26	0.60	0.16	0.16
query27	0.05	0.05	0.05
query28	9.86	0.84	0.42
query29	12.53	4.05	3.30
query30	0.25	0.09	0.07
query31	2.82	0.59	0.39
query32	3.23	0.53	0.46
query33	3.01	3.08	2.99
query34	15.84	5.18	4.58
query35	4.54	4.53	4.54
query36	0.65	0.48	0.48
query37	0.09	0.06	0.07
query38	0.05	0.04	0.04
query39	0.03	0.02	0.02
query40	0.18	0.14	0.13
query41	0.08	0.02	0.03
query42	0.04	0.03	0.02
query43	0.04	0.03	0.03
Total cold run time: 104.88 s
Total hot run time: 31.47 s
```
</details>

author_association: NONE
user: login: github-actions[bot]
created_at: 2025-04-08T13:35:42Z
body: PR approved by at least one committer and no changes requested.
author_association: CONTRIBUTOR
user: login: github-actions[bot]
created_at: 2025-04-08T13:35:45Z
body: PR approved by anyone and no changes requested.
author_association: CONTRIBUTOR
user: login: doris-robot
created_at: 2025-04-08T13:50:43Z
body: # BE UT Coverage Report
Increment line coverage `3.16% (3/95)` :tada:

[Increment coverage report](http://coverage.selectdb-in.cc/coverage/e14b70ba2c97185e2832eb8b284bc298693a2177_e14b70ba2c97185e2832eb8b284bc298693a2177/increment_report/index.html)
[Complete coverage report](http://coverage.selectdb-in.cc/coverage/e14b70ba2c97185e2832eb8b284bc298693a2177_e14b70ba2c97185e2832eb8b284bc298693a2177/report/index.html)
| Category          | Coverage           |
|-------------------|--------------------|
| Function Coverage | 52.26% (14032/26850) |
| Line Coverage     | 41.04% (121114/295103) |
| Region Coverage   | 39.78% (61635/154938) |
| Branch Coverage   | 34.45% (30852/89552) |
author_association: NONE