This is an automated email from the ASF dual-hosted git repository.

eldenmoon pushed a commit to branch cs_opt_version-3.1
in repository https://gitbox.apache.org/repos/asf/doris.git

commit 41964a53eea795d58b7490457d780a0fd1f154c7
Author: bobhan1 <[email protected]>
AuthorDate: Thu Nov 6 15:51:08 2025 +0800

    (cs_opt_3.1): [fix](cache stat) add builder stat to scanner (#56165) 
(#57743)
---
 be/src/olap/parallel_scanner_builder.cpp    |  3 ++-
 be/src/olap/parallel_scanner_builder.h      |  3 +++
 be/src/pipeline/exec/olap_scan_operator.cpp | 11 +++++++++++
 3 files changed, 16 insertions(+), 1 deletion(-)

diff --git a/be/src/olap/parallel_scanner_builder.cpp 
b/be/src/olap/parallel_scanner_builder.cpp
index 424d6c64d68..81ef4d92e37 100644
--- a/be/src/olap/parallel_scanner_builder.cpp
+++ b/be/src/olap/parallel_scanner_builder.cpp
@@ -191,7 +191,8 @@ Status ParallelScannerBuilder::_load() {
                     [esc = enable_segment_cache, rowset, &bmtx, p = 
std::move(prom), this] {
                         SegmentCacheHandle sch;
                         auto task_st = 
SegmentLoader::instance()->load_segments(
-                                std::dynamic_pointer_cast<BetaRowset>(rowset), 
&sch, esc, false);
+                                std::dynamic_pointer_cast<BetaRowset>(rowset), 
&sch, esc, false,
+                                &_builder_stats);
                         Defer defer([p, &task_st] { p->set_value(task_st); });
                         if (!task_st.ok()) return;
 
diff --git a/be/src/olap/parallel_scanner_builder.h 
b/be/src/olap/parallel_scanner_builder.h
index a746ff5ba5d..05c561ae338 100644
--- a/be/src/olap/parallel_scanner_builder.h
+++ b/be/src/olap/parallel_scanner_builder.h
@@ -64,6 +64,8 @@ public:
 
     void set_min_rows_per_scanner(int64_t size) { _min_rows_per_scanner = 
size; }
 
+    const OlapReaderStatistics* builder_stats() const { return 
&_builder_stats; }
+
 private:
     Status _load();
 
@@ -88,6 +90,7 @@ private:
     std::map<RowsetId, std::vector<size_t>> _all_segments_rows;
 
     std::shared_ptr<RuntimeProfile> _scanner_profile;
+    OlapReaderStatistics _builder_stats;
     RuntimeState* _state;
     int64_t _limit;
     bool _is_dup_mow_key;
diff --git a/be/src/pipeline/exec/olap_scan_operator.cpp 
b/be/src/pipeline/exec/olap_scan_operator.cpp
index 64437641d4e..3264c1b5f6f 100644
--- a/be/src/pipeline/exec/olap_scan_operator.cpp
+++ b/be/src/pipeline/exec/olap_scan_operator.cpp
@@ -28,6 +28,7 @@
 #include "cloud/cloud_tablet_hotspot.h"
 #include "cloud/config.h"
 #include "common/config.h"
+#include "io/cache/block_file_cache_profile.h"
 #include "olap/parallel_scanner_builder.h"
 #include "olap/storage_engine.h"
 #include "olap/tablet_manager.h"
@@ -402,6 +403,16 @@ Status 
OlapScanLocalState::_init_scanners(std::list<vectorized::VScannerSPtr>* s
             auto* olap_scanner = 
assert_cast<vectorized::NewOlapScanner*>(scanner.get());
             RETURN_IF_ERROR(olap_scanner->prepare(state(), _conjuncts));
         }
+
+        const OlapReaderStatistics* stats = scanner_builder.builder_stats();
+        io::FileCacheProfileReporter cache_profile(_segment_profile.get());
+        cache_profile.update(&stats->file_cache_stats);
+
+        DorisMetrics::instance()->query_scan_bytes_from_local->increment(
+                stats->file_cache_stats.bytes_read_from_local);
+        DorisMetrics::instance()->query_scan_bytes_from_remote->increment(
+                stats->file_cache_stats.bytes_read_from_remote);
+
         return Status::OK();
     }
 


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to