diff --git a/src/share/system_variable/ob_system_variable_init.cpp b/src/share/system_variable/ob_system_variable_init.cpp index 6e4a231a65..02b6c72b50 100644 --- a/src/share/system_variable/ob_system_variable_init.cpp +++ b/src/share/system_variable/ob_system_variable_init.cpp @@ -2367,7 +2367,7 @@ static struct VarsInit{ }(); [&] (){ - ObSysVars[166].default_value_ = "1" ; + ObSysVars[166].default_value_ = "0" ; ObSysVars[166].info_ = "enable batching of the RHS IO in NLJ" ; ObSysVars[166].name_ = "_nlj_batching_enabled" ; ObSysVars[166].data_type_ = ObIntType ; diff --git a/src/share/system_variable/ob_system_variable_init.json b/src/share/system_variable/ob_system_variable_init.json index f18e94583f..864b21112f 100644 --- a/src/share/system_variable/ob_system_variable_init.json +++ b/src/share/system_variable/ob_system_variable_init.json @@ -2379,7 +2379,7 @@ "_nlj_batching_enabled": { "id": 10080, "name": "_nlj_batching_enabled", - "default_value": "1", + "default_value": "0", "base_value": "1", "data_type": "bool", "info": "enable batching of the RHS IO in NLJ", diff --git a/src/sql/das/ob_das_group_scan_op.cpp b/src/sql/das/ob_das_group_scan_op.cpp index 62660ee8dc..3f3fceb2df 100644 --- a/src/sql/das/ob_das_group_scan_op.cpp +++ b/src/sql/das/ob_das_group_scan_op.cpp @@ -98,6 +98,7 @@ int ObDASGroupScanOp::open_op() iter_.init_group_range(cur_group_idx_, group_size_); if (OB_FAIL(iter_.init_row_store(scan_ctdef_->result_output_, *scan_rtdef_->eval_ctx_, + scan_ctdef_->pd_expr_spec_.access_exprs_, scan_rtdef_->stmt_allocator_, max_size, scan_ctdef_->group_id_expr_, @@ -241,6 +242,7 @@ int ObDASGroupScanOp::decode_task_result(ObIDASTaskResult *task_result) iter_.init_group_range(cur_group_idx_, group_size_); if (OB_FAIL(iter_.init_row_store(scan_ctdef_->result_output_, *scan_rtdef_->eval_ctx_, + scan_ctdef_->pd_expr_spec_.access_exprs_, scan_rtdef_->stmt_allocator_, max_size, scan_ctdef_->group_id_expr_, @@ -296,6 +298,7 @@ int ObGroupLookupOp::init_group_scan_iter(int64_t cur_group_idx, group_iter_.init_group_range(cur_group_idx, group_size); OZ(group_iter_.init_row_store(lookup_ctdef_->result_output_, *lookup_rtdef_->eval_ctx_, + lookup_ctdef_->pd_expr_spec_.access_exprs_, lookup_rtdef_->stmt_allocator_, max_row_store_size, group_id_expr, diff --git a/src/sql/das/ob_group_scan_iter.cpp b/src/sql/das/ob_group_scan_iter.cpp index e6ff704cd5..31d8adb76c 100644 --- a/src/sql/das/ob_group_scan_iter.cpp +++ b/src/sql/das/ob_group_scan_iter.cpp @@ -21,6 +21,7 @@ namespace sql { int ObGroupResultRows::init(const common::ObIArray &exprs, ObEvalCtx &eval_ctx, + const ExprFixedArray &access_exprs, ObIAllocator &das_op_allocator, int64_t max_size, ObExpr *group_id_expr, @@ -50,6 +51,7 @@ int ObGroupResultRows::init(const common::ObIArray &exprs, } inited_ = true; exprs_ = &exprs; + access_exprs_ = &access_exprs; eval_ctx_ = &eval_ctx; max_size_ = max_size; group_id_expr_pos_ = OB_INVALID_INDEX; @@ -349,10 +351,12 @@ int ObGroupScanIter::get_next_rows(int64_t &count, int64_t capacity) void ObGroupScanIter::reset_expr_datum_ptr() { - FOREACH_CNT(e, *row_store_.exprs_) { - (*e)->locate_datums_for_update(*row_store_.eval_ctx_, row_store_.max_size_); - ObEvalInfo &info = (*e)->get_eval_info(*row_store_.eval_ctx_); - info.point_to_frame_ = true; + if (OB_NOT_NULL(row_store_.access_exprs_)) { + FOREACH_CNT(e, *row_store_.access_exprs_) { + (*e)->locate_datums_for_update(*row_store_.eval_ctx_, row_store_.max_size_); + ObEvalInfo &info = (*e)->get_eval_info(*row_store_.eval_ctx_); + info.point_to_frame_ = true; + } } } diff --git a/src/sql/das/ob_group_scan_iter.h b/src/sql/das/ob_group_scan_iter.h index a2fdc014d4..96727c7623 100644 --- a/src/sql/das/ob_group_scan_iter.h +++ b/src/sql/das/ob_group_scan_iter.h @@ -23,7 +23,7 @@ class ObGroupResultRows public: ObGroupResultRows() : inited_(false), exprs_(NULL), eval_ctx_(NULL), saved_size_(0), max_size_(1), start_pos_(0), group_id_expr_pos_(0), - rows_(NULL), need_check_output_datum_(false),reuse_alloc_(nullptr) + rows_(NULL), need_check_output_datum_(false),reuse_alloc_(nullptr),access_exprs_(nullptr) { } @@ -31,6 +31,7 @@ public: int init(const common::ObIArray &exprs, ObEvalCtx &eval_ctx, + const ExprFixedArray &access_exprs, common::ObIAllocator &das_op_allocator, int64_t max_size, ObExpr *group_id_expr, @@ -57,6 +58,7 @@ public: reuse_alloc_->~ObArenaAllocator(); reuse_alloc_ = nullptr; } + access_exprs_ = nullptr; } TO_STRING_KV(K_(saved_size), K_(start_pos), @@ -86,6 +88,7 @@ public: //be move from das into Table scan op, every thing will be easy. common::ObArenaAllocator *reuse_alloc_; char reuse_alloc_buf_[sizeof(common::ObArenaAllocator)]; + const ExprFixedArray *access_exprs_; }; class ObGroupScanIter : public ObNewRowIterator @@ -116,6 +119,7 @@ public: ObExpr *get_group_id_expr() { return group_id_expr_; } int init_row_store(const common::ObIArray &exprs, ObEvalCtx &eval_ctx, + const ExprFixedArray &access_exprs, common::ObIAllocator &das_op_allocator, int64_t max_size, ObExpr *group_id_expr, @@ -127,6 +131,7 @@ public: iter_ = iter; return row_store_.init(exprs, eval_ctx, + access_exprs, das_op_allocator, max_size, group_id_expr, diff --git a/tools/deploy/init_for_ce.sql b/tools/deploy/init_for_ce.sql index 547118a766..8bc8708c90 100644 --- a/tools/deploy/init_for_ce.sql +++ b/tools/deploy/init_for_ce.sql @@ -28,6 +28,8 @@ alter tenant sys set variables ob_enable_truncate_flashback = 'on'; alter tenant mysql set variables ob_tcp_invited_nodes='%'; alter tenant mysql set variables recyclebin = 'on'; alter tenant mysql set variables ob_enable_truncate_flashback = 'on'; +alter tenant sys set variables _nlj_batching_enabled = true; +alter tenant mysql set variables _nlj_batching_enabled = true; alter system set ob_compaction_schedule_interval = '10s' tenant sys; alter system set ob_compaction_schedule_interval = '10s' tenant all_user; alter system set ob_compaction_schedule_interval = '10s' tenant all_meta;