diff --git a/be/src/exec/exec_node.cpp b/be/src/exec/exec_node.cpp index 97ccf5f701..afdccd97af 100644 --- a/be/src/exec/exec_node.cpp +++ b/be/src/exec/exec_node.cpp @@ -211,6 +211,7 @@ Status ExecNode::init(const TPlanNode& tnode, RuntimeState* state) { Status ExecNode::prepare(RuntimeState* state) { DCHECK(_runtime_profile.get() != nullptr); _rows_returned_counter = ADD_COUNTER(_runtime_profile, "RowsReturned", TUnit::UNIT); + _projection_timer = ADD_TIMER(_runtime_profile, "ProjectionTime"); _rows_returned_rate = runtime_profile()->add_derived_counter( ROW_THROUGHPUT_COUNTER, TUnit::UNIT_PER_SECOND, std::bind(&RuntimeProfile::units_per_second, _rows_returned_counter, @@ -806,6 +807,7 @@ std::string ExecNode::get_name() { } Status ExecNode::do_projections(vectorized::Block* origin_block, vectorized::Block* output_block) { + SCOPED_TIMER(_projection_timer); using namespace vectorized; auto is_mem_reuse = output_block->mem_reuse(); MutableBlock mutable_block = @@ -833,8 +835,7 @@ Status ExecNode::do_projections(vectorized::Block* origin_block, vectorized::Blo } Status ExecNode::get_next_after_projects(RuntimeState* state, vectorized::Block* block, bool* eos) { - // delete the UNLIKELY after support new optimizers - if (UNLIKELY(_output_row_descriptor)) { + if (_output_row_descriptor) { _origin_block.clear_column_data(_row_descriptor.num_materialized_slots()); auto status = get_next(state, &_origin_block, eos); if (UNLIKELY(!status.ok())) return status; diff --git a/be/src/exec/exec_node.h b/be/src/exec/exec_node.h index 62a6a0ccae..1de8f921a8 100644 --- a/be/src/exec/exec_node.h +++ b/be/src/exec/exec_node.h @@ -306,6 +306,7 @@ protected: RuntimeProfile::Counter* _rows_returned_rate; // Account for peak memory used by this node RuntimeProfile::Counter* _memory_used_counter; + RuntimeProfile::Counter* _projection_timer; /// Since get_next is a frequent operation, it is not necessary to generate a span for each call /// to the get_next method. Therefore, the call of the get_next method in the ExecNode is diff --git a/be/src/vec/exec/join/vjoin_node_base.cpp b/be/src/vec/exec/join/vjoin_node_base.cpp index 3c06e694ab..59d433aca7 100644 --- a/be/src/vec/exec/join/vjoin_node_base.cpp +++ b/be/src/vec/exec/join/vjoin_node_base.cpp @@ -109,6 +109,7 @@ Status VJoinNodeBase::_build_output_block(Block* origin_block, Block* output_blo } } else { DCHECK(mutable_columns.size() == row_desc().num_materialized_slots()); + SCOPED_TIMER(_projection_timer); for (int i = 0; i < mutable_columns.size(); ++i) { auto result_column_id = -1; RETURN_IF_ERROR(_output_expr_ctxs[i]->execute(origin_block, &result_column_id));