This is an automated email from the ASF dual-hosted git repository.
zhangchen pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push:
new 293b8094018 [Opt](log) Add more delete bitmap log for merge-on-write
table (#48930)
293b8094018 is described below
commit 293b8094018e3e441f6d8452694a171688fcdc0f
Author: bobhan1 <[email protected]>
AuthorDate: Wed Mar 12 16:24:47 2025 +0800
[Opt](log) Add more delete bitmap log for merge-on-write table (#48930)
Add more delete bitmap log for merge-on-write table
---
be/src/cloud/cloud_txn_delete_bitmap_cache.cpp | 13 ++++++++-
be/src/olap/base_tablet.cpp | 6 ++--
be/src/olap/data_dir.cpp | 38 ++++++++++++++++++++++----
be/src/olap/rowset/beta_rowset_writer.cpp | 2 ++
be/src/olap/rowset_builder.cpp | 10 +++----
5 files changed, 55 insertions(+), 14 deletions(-)
diff --git a/be/src/cloud/cloud_txn_delete_bitmap_cache.cpp
b/be/src/cloud/cloud_txn_delete_bitmap_cache.cpp
index 9a8b669e0ae..681cbbc8bf0 100644
--- a/be/src/cloud/cloud_txn_delete_bitmap_cache.cpp
+++ b/be/src/cloud/cloud_txn_delete_bitmap_cache.cpp
@@ -169,7 +169,9 @@ void CloudTxnDeleteBitmapCache::set_tablet_txn_info(
.tag("txn_id", transaction_id)
.tag("expiration", txn_expiration)
.tag("tablet_id", tablet_id)
- .tag("delete_bitmap_size", charge);
+ .tag("delete_bitmap_size", charge)
+ .tag("delete_bitmap_count",
delete_bitmap->get_delete_bitmap_count())
+ .tag("delete_bitmap_cardinality", delete_bitmap->cardinality());
}
Status CloudTxnDeleteBitmapCache::update_tablet_txn_info(TTransactionId
transaction_id,
@@ -205,6 +207,15 @@ Status
CloudTxnDeleteBitmapCache::update_tablet_txn_info(TTransactionId transact
// must call release handle to reduce the reference count,
// otherwise there will be memory leak
release(handle);
+ if (config::enable_mow_verbose_log) {
+ LOG_INFO("update txn related delete bitmap")
+ .tag("txn_id", transaction_id)
+ .tag("tablt_id", tablet_id)
+ .tag("delete_bitmap_size", charge)
+ .tag("delete_bitmap_count",
delete_bitmap->get_delete_bitmap_count())
+ .tag("delete_bitmap_cardinality", delete_bitmap->cardinality())
+ .tag("publish_status", static_cast<int>(publish_status));
+ }
return Status::OK();
}
diff --git a/be/src/olap/base_tablet.cpp b/be/src/olap/base_tablet.cpp
index db27c55a28d..8b2e566b9b1 100644
--- a/be/src/olap/base_tablet.cpp
+++ b/be/src/olap/base_tablet.cpp
@@ -824,7 +824,8 @@ Status
BaseTablet::calc_segment_delete_bitmap(RowsetSharedPtr rowset,
<< " rows: " << seg->num_rows() << " conflict rows: " <<
conflict_rows
<< " filtered rows: " << rids_be_overwritten.size()
<< " new generated rows: " << new_generated_rows
- << " bimap num: " << delete_bitmap->delete_bitmap.size()
+ << " bitmap num: " <<
delete_bitmap->get_delete_bitmap_count()
+ << " bitmap cardinality: " <<
delete_bitmap->cardinality()
<< " cost: " << cost_us << "(us)";
}
return Status::OK();
@@ -835,7 +836,8 @@ Status
BaseTablet::calc_segment_delete_bitmap(RowsetSharedPtr rowset,
<< " rowset: " << rowset_id << " seg_id: " << seg->id()
<< " dummy_version: " << end_version + 1 << " rows: " <<
seg->num_rows()
<< " conflict rows: " << conflict_rows
- << " bitmap num: " << delete_bitmap->delete_bitmap.size() <<
" cost: " << cost_us
+ << " bitmap num: " <<
delete_bitmap->get_delete_bitmap_count()
+ << " bitmap cardinality: " << delete_bitmap->cardinality()
<< " cost: " << cost_us
<< "(us)";
}
return Status::OK();
diff --git a/be/src/olap/data_dir.cpp b/be/src/olap/data_dir.cpp
index 5a773a0a6ad..323288678d5 100644
--- a/be/src/olap/data_dir.cpp
+++ b/be/src/olap/data_dir.cpp
@@ -403,12 +403,15 @@ Status DataDir::load() {
dir_rowset_metas.push_back(rowset_meta);
return true;
};
+ MonotonicStopWatch rs_timer;
+ rs_timer.start();
Status load_rowset_status =
RowsetMetaManager::traverse_rowset_metas(_meta, load_rowset_func);
-
+ rs_timer.stop();
if (!load_rowset_status) {
LOG(WARNING) << "errors when load rowset meta from meta env, skip this
data dir:" << _path;
} else {
- LOG(INFO) << "load rowset from meta finished, data dir: " << _path;
+ LOG(INFO) << "load rowset from meta finished, cost: "
+ << rs_timer.elapsed_time_milliseconds() << " ms, data dir: "
<< _path;
}
// load tablet
@@ -445,7 +448,10 @@ Status DataDir::load() {
}
return true;
};
+ MonotonicStopWatch tablet_timer;
+ tablet_timer.start();
Status load_tablet_status = TabletMetaManager::traverse_headers(_meta,
load_tablet_func);
+ tablet_timer.stop();
if (!failed_tablet_ids.empty()) {
LOG(WARNING) << "load tablets from header failed"
<< ", loaded tablet: " << tablet_ids.size()
@@ -462,7 +468,9 @@ Status DataDir::load() {
} else {
LOG(INFO) << "load tablet from meta finished"
<< ", loaded tablet: " << tablet_ids.size()
- << ", error tablet: " << failed_tablet_ids.size() << ",
path: " << _path;
+ << ", error tablet: " << failed_tablet_ids.size()
+ << ", cost: " << tablet_timer.elapsed_time_milliseconds()
+ << " ms, path: " << _path;
}
for (int64_t tablet_id : tablet_ids) {
@@ -486,8 +494,13 @@ Status DataDir::load() {
pending_publish_info_pb.transaction_id(), true);
return true;
};
+ MonotonicStopWatch pending_publish_timer;
+ pending_publish_timer.start();
RETURN_IF_ERROR(
TabletMetaManager::traverse_pending_publish(_meta,
load_pending_publish_info_func));
+ pending_publish_timer.stop();
+ LOG(INFO) << "load pending publish task from meta finished, cost: "
+ << pending_publish_timer.elapsed_time_milliseconds() << " ms,
data dir: " << _path;
int64_t rowset_partition_id_eq_0_num = 0;
for (auto rowset_meta : dir_rowset_metas) {
@@ -590,8 +603,11 @@ Status DataDir::load() {
}
}
- auto load_delete_bitmap_func = [this](int64_t tablet_id, int64_t version,
- std::string_view val) {
+ int64_t dbm_cnt {0};
+ int64_t unknown_dbm_cnt {0};
+ auto load_delete_bitmap_func = [this, &dbm_cnt, &unknown_dbm_cnt](int64_t
tablet_id,
+ int64_t
version,
+
std::string_view val) {
TabletSharedPtr tablet =
_engine.tablet_manager()->get_tablet(tablet_id);
if (!tablet) {
return true;
@@ -614,8 +630,10 @@ Status DataDir::load() {
rst_id.init(delete_bitmap_pb.rowset_ids(i));
// only process the rowset in _rs_metas
if (rowset_ids.find(rst_id) == rowset_ids.end()) {
+ ++unknown_dbm_cnt;
continue;
}
+ ++dbm_cnt;
auto seg_id = delete_bitmap_pb.segment_ids(i);
auto iter =
tablet->tablet_meta()->delete_bitmap().delete_bitmap.find(
{rst_id, seg_id, version});
@@ -629,14 +647,22 @@ Status DataDir::load() {
}
return true;
};
+ MonotonicStopWatch dbm_timer;
+ dbm_timer.start();
RETURN_IF_ERROR(TabletMetaManager::traverse_delete_bitmap(_meta,
load_delete_bitmap_func));
+ dbm_timer.stop();
+
+ LOG(INFO) << "load delete bitmap from meta finished, cost: "
+ << dbm_timer.elapsed_time_milliseconds() << " ms, data dir: " <<
_path;
// At startup, we only count these invalid rowset, but do not actually
delete it.
// The actual delete operation is in
StorageEngine::_clean_unused_rowset_metas,
// which is cleaned up uniformly by the background cleanup thread.
LOG(INFO) << "finish to load tablets from " << _path
<< ", total rowset meta: " << dir_rowset_metas.size()
- << ", invalid rowset num: " << invalid_rowset_counter;
+ << ", invalid rowset num: " << invalid_rowset_counter
+ << ", visible/stale rowsets' delete bitmap count: " << dbm_cnt
+ << ", invalid rowsets' delete bitmap count: " << unknown_dbm_cnt;
return Status::OK();
}
diff --git a/be/src/olap/rowset/beta_rowset_writer.cpp
b/be/src/olap/rowset/beta_rowset_writer.cpp
index d4f10b8078a..edca329e31f 100644
--- a/be/src/olap/rowset/beta_rowset_writer.cpp
+++ b/be/src/olap/rowset/beta_rowset_writer.cpp
@@ -344,6 +344,8 @@ Status
BaseBetaRowsetWriter::_generate_delete_bitmap(int32_t segment_id) {
<< ", cur max_version: " << _context.mow_context->max_version
<< ", transaction_id: " << _context.mow_context->txn_id << ",
delete_bitmap_count: "
<<
_context.tablet->tablet_meta()->delete_bitmap().get_delete_bitmap_count()
+ << ", delete_bitmap_cardinality: "
+ << _context.tablet->tablet_meta()->delete_bitmap().cardinality()
<< ", cost: " << watch.get_elapse_time_us() << "(us), total
rows: " << total_rows;
return Status::OK();
}
diff --git a/be/src/olap/rowset_builder.cpp b/be/src/olap/rowset_builder.cpp
index c7a0444c0a8..f7295e76217 100644
--- a/be/src/olap/rowset_builder.cpp
+++ b/be/src/olap/rowset_builder.cpp
@@ -299,13 +299,13 @@ Status
BaseRowsetBuilder::submit_calc_delete_bitmap_task() {
// we print it's summarize logs here before commit.
LOG(INFO) << fmt::format(
"{} calc delete bitmap summary before commit: tablet({}),
txn_id({}), "
- "rowset_ids({}), cur max_version({}), bitmap num({}), num rows
updated({}), num "
- "rows new added({}), num rows deleted({}), total rows({})",
+ "rowset_ids({}), cur max_version({}), bitmap num({}),
bitmap_cardinality({}), num "
+ "rows updated({}), num rows new added({}), num rows
deleted({}), total rows({})",
_partial_update_info->partial_update_mode_str(),
tablet()->tablet_id(), _req.txn_id,
_rowset_ids.size(),
rowset_writer()->context().mow_context->max_version,
- _delete_bitmap->delete_bitmap.size(),
rowset_writer()->num_rows_updated(),
- rowset_writer()->num_rows_new_added(),
rowset_writer()->num_rows_deleted(),
- rowset_writer()->num_rows());
+ _delete_bitmap->get_delete_bitmap_count(),
_delete_bitmap->cardinality(),
+ rowset_writer()->num_rows_updated(),
rowset_writer()->num_rows_new_added(),
+ rowset_writer()->num_rows_deleted(),
rowset_writer()->num_rows());
return Status::OK();
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]