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]