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

yiguolei pushed a commit to branch dev-1.1.2
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/dev-1.1.2 by this push:
     new bd0ac85d2c [Improvement](storage) reuse schema and rowblockv2 on 
single scanner_thread (#11392) (#12178)
bd0ac85d2c is described below

commit bd0ac85d2c0f89c3ceba4fa3c7bc0deb3a44acd1
Author: Userwhite <[email protected]>
AuthorDate: Wed Aug 31 14:34:34 2022 +0800

    [Improvement](storage) reuse schema and rowblockv2 on single scanner_thread 
(#11392) (#12178)
    
    * support reuse rowblockv2 on single thread
---
 be/src/olap/rowset/beta_rowset_reader.cpp  | 14 +++++++++++---
 be/src/olap/rowset/beta_rowset_reader.h    |  4 ++--
 be/src/olap/rowset/rowset_reader_context.h |  2 ++
 3 files changed, 15 insertions(+), 5 deletions(-)

diff --git a/be/src/olap/rowset/beta_rowset_reader.cpp 
b/be/src/olap/rowset/beta_rowset_reader.cpp
index 69127afe7a..62b5493c1b 100644
--- a/be/src/olap/rowset/beta_rowset_reader.cpp
+++ b/be/src/olap/rowset/beta_rowset_reader.cpp
@@ -55,7 +55,12 @@ OLAPStatus BetaRowsetReader::init(RowsetReaderContext* 
read_context) {
         _stats = _context->stats;
     }
     // SegmentIterator will load seek columns on demand
-    _schema = std::make_unique<Schema>(_context->tablet_schema->columns(), 
*(_context->return_columns));
+
+    if (_context->reuse_input_schema == nullptr) {
+        _context->reuse_input_schema.reset(
+                new Schema(_context->tablet_schema->columns(), 
*(_context->return_columns)));
+    }
+    _schema = _context->reuse_input_schema;
 
     // convert RowsetReaderContext to StorageReadOptions
     StorageReadOptions read_options;
@@ -141,8 +146,11 @@ OLAPStatus BetaRowsetReader::init(RowsetReaderContext* 
read_context) {
     _iterator.reset(final_iterator);
 
     // init input block
-    _input_block.reset(new RowBlockV2(*_schema,
-            std::min(1024, read_context->batch_size), _parent_tracker));
+    if (read_context->reuse_block == nullptr) {
+        read_context->reuse_block.reset(
+                new RowBlockV2(*_schema, std::min(1024, 
read_context->batch_size), _parent_tracker));
+    }
+    _input_block = read_context->reuse_block;
 
     if (!read_context->is_vec) {
         // init input/output block and row
diff --git a/be/src/olap/rowset/beta_rowset_reader.h 
b/be/src/olap/rowset/beta_rowset_reader.h
index 919e13cb7a..2a5d4d4507 100644
--- a/be/src/olap/rowset/beta_rowset_reader.h
+++ b/be/src/olap/rowset/beta_rowset_reader.h
@@ -58,7 +58,7 @@ public:
 private:
     bool _should_push_down_value_predicates() const;
 
-    std::unique_ptr<Schema> _schema;
+    std::shared_ptr<Schema> _schema;
     RowsetReaderContext* _context;
     BetaRowsetSharedPtr _rowset;
 
@@ -69,7 +69,7 @@ private:
 
     std::unique_ptr<RowwiseIterator> _iterator;
 
-    std::unique_ptr<RowBlockV2> _input_block;
+    std::shared_ptr<RowBlockV2> _input_block;
     std::unique_ptr<RowBlock> _output_block;
     std::unique_ptr<RowCursor> _row;
 
diff --git a/be/src/olap/rowset/rowset_reader_context.h 
b/be/src/olap/rowset/rowset_reader_context.h
index 374e5da857..d1f0b4b2a2 100644
--- a/be/src/olap/rowset/rowset_reader_context.h
+++ b/be/src/olap/rowset/rowset_reader_context.h
@@ -68,6 +68,8 @@ struct RowsetReaderContext {
 
     // need pass this info to VMergeIterator
     std::unordered_set<uint32_t>* tablet_columns_convert_to_null_set = nullptr;
+    std::shared_ptr<RowBlockV2> reuse_block;
+    std::shared_ptr<Schema> reuse_input_schema;
 };
 
 } // namespace doris


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

Reply via email to