From 5c0529459b5c1fccf308ed416e1b7f754137e2f7 Mon Sep 17 00:00:00 2001 From: obdev Date: Fri, 20 Sep 2024 06:00:47 +0000 Subject: [PATCH] vector index paralle --- src/sql/das/ob_vector_index_lookup_op.cpp | 16 ++++++++++++++-- src/sql/optimizer/ob_join_order.cpp | 2 +- src/sql/optimizer/ob_log_table_scan.cpp | 2 +- 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/sql/das/ob_vector_index_lookup_op.cpp b/src/sql/das/ob_vector_index_lookup_op.cpp index c72a0fb1b..8a17750af 100644 --- a/src/sql/das/ob_vector_index_lookup_op.cpp +++ b/src/sql/das/ob_vector_index_lookup_op.cpp @@ -77,6 +77,9 @@ int ObVectorIndexLookupOp::init(const ObDASBaseCtDef *table_lookup_ctdef, snapshot, scan_param))) { LOG_WARN("failed to init domain index lookup op", K(ret)); + } else if (OB_ISNULL(doc_id_lookup_rtdef_) || OB_ISNULL(lookup_rtdef_)) { + ret = OB_BAD_NULL_ERROR; + LOG_WARN("lookup rtdef is nullptr", KP(doc_id_lookup_rtdef_), KP(lookup_rtdef_)); } else { need_scan_aux_ = true; doc_id_lookup_ctdef_ = aux_lookup_ctdef->get_lookup_scan_ctdef(); @@ -92,6 +95,8 @@ int ObVectorIndexLookupOp::init(const ObDASBaseCtDef *table_lookup_ctdef, com_aux_vec_ctdef_ = vir_scan_ctdef->get_com_aux_tbl_ctdef(); com_aux_vec_rtdef_ = vir_scan_rtdef->get_com_aux_tbl_rtdef(); set_dim(vir_scan_ctdef->dim_); + doc_id_lookup_rtdef_->scan_flag_.scan_order_ = ObQueryFlag::KeepOrder; + lookup_rtdef_->scan_flag_.scan_order_ = ObQueryFlag::KeepOrder; if (DAS_OP_SORT == aux_lookup_ctdef->get_doc_id_scan_ctdef()->op_type_) { sort_ctdef_ = static_cast(aux_lookup_ctdef->get_doc_id_scan_ctdef()); sort_rtdef_ = static_cast(aux_lookup_rtdef->get_doc_id_scan_rtdef()); @@ -747,8 +752,13 @@ int ObVectorIndexLookupOp::prepare_state(const ObVidAdaLookupStatus& cur_state, if (OB_FAIL(ret)) { } else if (OB_FAIL(ObLocalIndexLookupOp::reset_lookup_state())) { LOG_WARN("failed to reset look up status.", K(ret)); - } else if (OB_FAIL(ObVectorIndexLookupOp::revert_iter_for_complete_data())) { - LOG_WARN("failed to revert vid rowkey iter.", K(ret)); + } + + // release iter for complete data, even OB_FAIL + int tmp_ret = revert_iter_for_complete_data(); + if (tmp_ret != OB_SUCCESS) { + LOG_WARN("failed to revert complete data iter.", K(ret)); + ret = ret == OB_SUCCESS ? tmp_ret : ret; } break; } @@ -1218,6 +1228,8 @@ int ObVectorIndexLookupOp::revert_iter() LOG_WARN("revert scan iterator failed", K(ret)); } else if (OB_FAIL(tsc_service.revert_scan_iter(aux_lookup_iter_))) { LOG_WARN("revert index table scan iterator (opened by dasop) failed", K(ret)); + } else if (OB_FAIL(revert_iter_for_complete_data())) { + LOG_WARN("failed to revert iter for complete data.", K(ret)); } else { delta_buf_iter_ = nullptr; index_id_iter_ = nullptr; diff --git a/src/sql/optimizer/ob_join_order.cpp b/src/sql/optimizer/ob_join_order.cpp index 7b0447a7f..10fd74811 100644 --- a/src/sql/optimizer/ob_join_order.cpp +++ b/src/sql/optimizer/ob_join_order.cpp @@ -896,7 +896,7 @@ int ObJoinOrder::compute_base_table_parallel_and_server_info(const OpParallelRul if (OpParallelRule::OP_TABLE_DOP == op_parallel_rule) { final_parallel = index_schema->get_dop(); } - if (index_schema->is_spatial_index() && index_schema->get_partition_num() < final_parallel) { + if ((index_schema->is_spatial_index() || index_schema->is_vec_index()) && index_schema->get_partition_num() < final_parallel) { final_parallel = index_schema->get_partition_num(); } if (final_parallel < ObGlobalHint::DEFAULT_PARALLEL) { diff --git a/src/sql/optimizer/ob_log_table_scan.cpp b/src/sql/optimizer/ob_log_table_scan.cpp index 7890c8ffc..0f158b84e 100644 --- a/src/sql/optimizer/ob_log_table_scan.cpp +++ b/src/sql/optimizer/ob_log_table_scan.cpp @@ -2219,7 +2219,7 @@ int ObLogTableScan::allocate_granule_post(AllocGIContext &ctx) || table_schema->is_key_subpart() || table_schema->is_key_subpart(); //Before GI is adapted to the real agent table, block gi cannot be assigned to it if (share::is_oracle_mapping_real_virtual_table(table_schema->get_table_id()) - || table_schema->is_spatial_index()) { + || table_schema->is_spatial_index() || table_schema->is_vec_index()) { ctx.set_force_partition(); } } else { /*do nothing*/ }