Skip to content

Commit 1b89033

Browse files
authored
[fix](cache stat) add builder stat to scanner (apache#56165)
1 parent 9d0110e commit 1b89033

File tree

9 files changed

+32
-11
lines changed

9 files changed

+32
-11
lines changed

be/src/olap/parallel_scanner_builder.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -226,7 +226,7 @@ Status ParallelScannerBuilder::_load() {
226226

227227
auto beta_rowset = std::dynamic_pointer_cast<BetaRowset>(rowset);
228228
std::vector<uint32_t> segment_rows;
229-
RETURN_IF_ERROR(beta_rowset->get_segment_num_rows(&segment_rows));
229+
RETURN_IF_ERROR(beta_rowset->get_segment_num_rows(&segment_rows, &_builder_stats));
230230
auto segment_count = rowset->num_segments();
231231
for (int64_t i = 0; i != segment_count; i++) {
232232
_all_segments_rows[rowset_id].emplace_back(segment_rows[i]);

be/src/olap/parallel_scanner_builder.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,8 @@ class ParallelScannerBuilder {
6666

6767
void set_optimize_index_scan_parallelism(bool v) { _optimize_index_scan_parallelism = v; }
6868

69+
const OlapReaderStatistics* builder_stats() const { return &_builder_stats; }
70+
6971
private:
7072
Status _load();
7173

@@ -96,6 +98,7 @@ class ParallelScannerBuilder {
9698
bool _optimize_index_scan_parallelism {false};
9799

98100
std::shared_ptr<RuntimeProfile> _scanner_profile;
101+
OlapReaderStatistics _builder_stats;
99102
RuntimeState* _state;
100103
int64_t _limit;
101104
bool _is_dup_mow_key;

be/src/olap/rowset/beta_rowset.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -71,19 +71,20 @@ Status BetaRowset::init() {
7171
return Status::OK(); // no op
7272
}
7373

74-
Status BetaRowset::get_segment_num_rows(std::vector<uint32_t>* segment_rows) {
74+
Status BetaRowset::get_segment_num_rows(std::vector<uint32_t>* segment_rows,
75+
OlapReaderStatistics* read_stats) {
7576
// `ROWSET_UNLOADING` is state for closed() called but owned by some readers.
7677
// So here `ROWSET_UNLOADING` is allowed.
7778
DCHECK_NE(_rowset_state_machine.rowset_state(), ROWSET_UNLOADED);
7879

79-
RETURN_IF_ERROR(_load_segment_rows_once.call([this] {
80+
RETURN_IF_ERROR(_load_segment_rows_once.call([this, read_stats] {
8081
auto segment_count = num_segments();
8182
_segments_rows.resize(segment_count);
8283
for (int64_t i = 0; i != segment_count; ++i) {
8384
SegmentCacheHandle segment_cache_handle;
8485
RETURN_IF_ERROR(SegmentLoader::instance()->load_segment(
8586
std::static_pointer_cast<BetaRowset>(shared_from_this()), i,
86-
&segment_cache_handle, false, false));
87+
&segment_cache_handle, false, false, read_stats));
8788
const auto& tmp_segments = segment_cache_handle.get_segments();
8889
_segments_rows[i] = tmp_segments[0]->num_rows();
8990
}

be/src/olap/rowset/beta_rowset.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,8 @@ class BetaRowset final : public Rowset {
9191
Status show_nested_index_file(rapidjson::Value* rowset_value,
9292
rapidjson::Document::AllocatorType& allocator);
9393

94-
Status get_segment_num_rows(std::vector<uint32_t>* segment_rows);
94+
Status get_segment_num_rows(std::vector<uint32_t>* segment_rows,
95+
OlapReaderStatistics* read_stats);
9596

9697
protected:
9798
BetaRowset(const TabletSchemaSPtr& schema, const RowsetMetaSharedPtr& rowset_meta,

be/src/olap/rowset/beta_rowset_reader.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -246,7 +246,7 @@ Status BetaRowsetReader::get_segment_iterators(RowsetReaderContext* read_context
246246
if (_read_context->record_rowids && _read_context->rowid_conversion) {
247247
// init segment rowid map for rowid conversion
248248
std::vector<uint32_t> segment_rows;
249-
RETURN_IF_ERROR(_rowset->get_segment_num_rows(&segment_rows));
249+
RETURN_IF_ERROR(_rowset->get_segment_num_rows(&segment_rows, _stats));
250250
RETURN_IF_ERROR(_read_context->rowid_conversion->init_segment_map(rowset()->rowset_id(),
251251
segment_rows));
252252
}

be/src/pipeline/exec/olap_scan_operator.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
#include "cloud/cloud_tablet.h"
2828
#include "cloud/cloud_tablet_hotspot.h"
2929
#include "cloud/config.h"
30+
#include "io/cache/block_file_cache_profile.h"
3031
#include "olap/parallel_scanner_builder.h"
3132
#include "olap/rowset/segment_v2/ann_index/ann_topn_runtime.h"
3233
#include "olap/storage_engine.h"
@@ -87,6 +88,7 @@ Status OlapScanLocalState::_init_profile() {
8788
// Rows read from storage.
8889
// Include the rows read from doris page cache.
8990
_scan_rows = ADD_COUNTER(custom_profile(), "ScanRows", TUnit::UNIT);
91+
9092
// 1. init segment profile
9193
_segment_profile.reset(new RuntimeProfile("SegmentIterator"));
9294
_scanner_profile->add_child(_segment_profile.get(), true, nullptr);
@@ -507,6 +509,15 @@ Status OlapScanLocalState::_init_scanners(std::list<vectorized::ScannerSPtr>* sc
507509
RETURN_IF_ERROR(olap_scanner->init(state(), _conjuncts));
508510
}
509511

512+
const OlapReaderStatistics* stats = scanner_builder.builder_stats();
513+
io::FileCacheProfileReporter cache_profile(_segment_profile.get());
514+
cache_profile.update(&stats->file_cache_stats);
515+
516+
DorisMetrics::instance()->query_scan_bytes_from_local->increment(
517+
stats->file_cache_stats.bytes_read_from_local);
518+
DorisMetrics::instance()->query_scan_bytes_from_remote->increment(
519+
stats->file_cache_stats.bytes_read_from_remote);
520+
510521
return Status::OK();
511522
}
512523

be/test/olap/rowid_conversion_test.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -383,7 +383,8 @@ class TestRowIdConversion : public testing::TestWithParam<std::tuple<KeysType, b
383383
EXPECT_EQ(out_rowset->rowset_meta()->num_rows(), output_data.size());
384384
auto beta_rowset = std::dynamic_pointer_cast<BetaRowset>(out_rowset);
385385
std::vector<uint32_t> segment_num_rows;
386-
EXPECT_TRUE(beta_rowset->get_segment_num_rows(&segment_num_rows).ok());
386+
OlapReaderStatistics statistics;
387+
EXPECT_TRUE(beta_rowset->get_segment_num_rows(&segment_num_rows, &statistics).ok());
387388
if (has_delete_handler) {
388389
// All keys less than 1000 are deleted by delete handler
389390
for (auto& item : output_data) {

be/test/olap/segcompaction_mow_test.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -281,7 +281,8 @@ class SegCompactionMoWTest : public ::testing::TestWithParam<std::string> {
281281
EXPECT_EQ(num_rows_read, expect_total_rows - rows_mark_deleted);
282282
auto beta_rowset = std::dynamic_pointer_cast<BetaRowset>(rowset);
283283
std::vector<uint32_t> segment_num_rows;
284-
EXPECT_TRUE(beta_rowset->get_segment_num_rows(&segment_num_rows).ok());
284+
OlapReaderStatistics stats;
285+
EXPECT_TRUE(beta_rowset->get_segment_num_rows(&segment_num_rows, &stats).ok());
285286
size_t total_num_rows = 0;
286287
for (const auto& i : segment_num_rows) {
287288
total_num_rows += i;

be/test/olap/segcompaction_test.cpp

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -388,7 +388,8 @@ TEST_F(SegCompactionTest, SegCompactionThenRead) {
388388
EXPECT_EQ(num_rows_read, num_segments * rows_per_segment);
389389
auto beta_rowset = std::dynamic_pointer_cast<BetaRowset>(rowset);
390390
std::vector<uint32_t> segment_num_rows;
391-
EXPECT_TRUE(beta_rowset->get_segment_num_rows(&segment_num_rows).ok());
391+
OlapReaderStatistics stats;
392+
EXPECT_TRUE(beta_rowset->get_segment_num_rows(&segment_num_rows, &stats).ok());
392393
size_t total_num_rows = 0;
393394
for (const auto& i : segment_num_rows) {
394395
total_num_rows += i;
@@ -894,7 +895,8 @@ TEST_F(SegCompactionTest, SegCompactionThenReadUniqueTableSmall) {
894895
EXPECT_GE(rowset->rowset_meta()->num_rows(), num_rows_read);
895896
auto beta_rowset = std::dynamic_pointer_cast<BetaRowset>(rowset);
896897
std::vector<uint32_t> segment_num_rows;
897-
EXPECT_TRUE(beta_rowset->get_segment_num_rows(&segment_num_rows).ok());
898+
OlapReaderStatistics stats;
899+
EXPECT_TRUE(beta_rowset->get_segment_num_rows(&segment_num_rows, &stats).ok());
898900
size_t total_num_rows = 0;
899901
for (const auto& i : segment_num_rows) {
900902
total_num_rows += i;
@@ -1159,7 +1161,8 @@ TEST_F(SegCompactionTest, SegCompactionThenReadAggTableSmall) {
11591161
EXPECT_GE(rowset->rowset_meta()->num_rows(), num_rows_read);
11601162
auto beta_rowset = std::dynamic_pointer_cast<BetaRowset>(rowset);
11611163
std::vector<uint32_t> segment_num_rows;
1162-
EXPECT_TRUE(beta_rowset->get_segment_num_rows(&segment_num_rows).ok());
1164+
OlapReaderStatistics stats;
1165+
EXPECT_TRUE(beta_rowset->get_segment_num_rows(&segment_num_rows, &stats).ok());
11631166
size_t total_num_rows = 0;
11641167
for (const auto& i : segment_num_rows) {
11651168
total_num_rows += i;

0 commit comments

Comments
 (0)