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

liaoxin 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 87c6a003cea [performance](mow) async calc delete bitmap in add_segment 
(#48156)
87c6a003cea is described below

commit 87c6a003cea75a5e5a0376915f98e57ed49bd4cb
Author: Kaijie Chen <chenkai...@selectdb.com>
AuthorDate: Mon Mar 3 22:07:48 2025 +0800

    [performance](mow) async calc delete bitmap in add_segment (#48156)
    
    Implement async calculation of delete bitmap in
    `RowsetWriter::add_segment()` to reduce wait in segment flush threads.
    A 100% load performance improvement was observed in
    memtable_on_sink_node + mow cases.
---
 be/src/olap/rowset/beta_rowset_writer.cpp | 13 ++++++++++++-
 be/src/olap/rowset/beta_rowset_writer.h   |  1 +
 2 files changed, 13 insertions(+), 1 deletion(-)

diff --git a/be/src/olap/rowset/beta_rowset_writer.cpp 
b/be/src/olap/rowset/beta_rowset_writer.cpp
index 8093a9d3bca..d4f10b8078a 100644
--- a/be/src/olap/rowset/beta_rowset_writer.cpp
+++ b/be/src/olap/rowset/beta_rowset_writer.cpp
@@ -277,6 +277,10 @@ BetaRowsetWriter::~BetaRowsetWriter() {
      * is cancelled, the objects involved in the job should be preserved 
during segcompaction to
      * avoid crashs for memory issues. */
     WARN_IF_ERROR(_wait_flying_segcompaction(), "segment compaction failed");
+
+    if (_calc_delete_bitmap_token != nullptr) {
+        _calc_delete_bitmap_token->cancel();
+    }
 }
 
 Status BaseBetaRowsetWriter::init(const RowsetWriterContext& 
rowset_writer_context) {
@@ -330,7 +334,8 @@ Status 
BaseBetaRowsetWriter::_generate_delete_bitmap(int32_t segment_id) {
     OlapStopWatch watch;
     RETURN_IF_ERROR(BaseTablet::calc_delete_bitmap(
             _context.tablet, rowset_ptr, segments, specified_rowsets,
-            _context.mow_context->delete_bitmap, 
_context.mow_context->max_version, nullptr));
+            _context.mow_context->delete_bitmap, 
_context.mow_context->max_version,
+            _calc_delete_bitmap_token.get()));
     size_t total_rows = std::accumulate(
             segments.begin(), segments.end(), 0,
             [](size_t sum, const segment_v2::SegmentSharedPtr& s) { return sum 
+= s->num_rows(); });
@@ -348,6 +353,9 @@ Status BetaRowsetWriter::init(const RowsetWriterContext& 
rowset_writer_context)
     if (_segcompaction_worker) {
         _segcompaction_worker->init_mem_tracker(rowset_writer_context);
     }
+    if (_context.mow_context != nullptr) {
+        _calc_delete_bitmap_token = 
_engine.calc_delete_bitmap_executor()->create_token();
+    }
     return Status::OK();
 }
 
@@ -801,6 +809,9 @@ Status BetaRowsetWriter::_close_file_writers() {
 }
 
 Status BetaRowsetWriter::build(RowsetSharedPtr& rowset) {
+    if (_calc_delete_bitmap_token != nullptr) {
+        RETURN_IF_ERROR(_calc_delete_bitmap_token->wait());
+    }
     RETURN_IF_ERROR(_close_file_writers());
     const auto total_segment_num = _num_segment - _segcompacted_point + 1 + 
_num_segcompacted;
     
RETURN_NOT_OK_STATUS_WITH_WARN(_check_segment_number_limit(total_segment_num),
diff --git a/be/src/olap/rowset/beta_rowset_writer.h 
b/be/src/olap/rowset/beta_rowset_writer.h
index a69d1063a55..c4561b317b7 100644
--- a/be/src/olap/rowset/beta_rowset_writer.h
+++ b/be/src/olap/rowset/beta_rowset_writer.h
@@ -257,6 +257,7 @@ protected:
     fmt::memory_buffer vlog_buffer;
 
     std::shared_ptr<MowContext> _mow_context;
+    std::unique_ptr<CalcDeleteBitmapToken> _calc_delete_bitmap_token;
 
     int64_t _delete_bitmap_ns = 0;
     int64_t _segment_writer_ns = 0;


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to