Fix the issue of 500 tenant memory inflation caused by slice_calc in the px module
This commit is contained in:
		| @ -237,10 +237,10 @@ int ObRepartSliceIdxCalc::get_previous_row_tablet_id(ObObj &tablet_id) | ||||
|   return ret; | ||||
| } | ||||
|  | ||||
| int ObSlaveMapRepartIdxCalcBase::init() | ||||
| int ObSlaveMapRepartIdxCalcBase::init(uint64_t tenant_id) | ||||
| { | ||||
|   int ret = OB_SUCCESS; | ||||
|   if (OB_FAIL(ObRepartSliceIdxCalc::init())) { | ||||
|   if (OB_FAIL(ObRepartSliceIdxCalc::init(tenant_id))) { | ||||
|     LOG_WARN("fail init base", K(ret)); | ||||
|   } | ||||
|   // 在pkey random情况下,一个partition是可以被其所在的SQC上的所有worker处理的, | ||||
| @ -254,7 +254,10 @@ int ObSlaveMapRepartIdxCalcBase::init() | ||||
|   // p2 : [task4,task5] | ||||
|   const ObPxPartChMapTMArray &part_ch_array = part_ch_info_.part_ch_array_; | ||||
|   if (OB_SUCC(ret)) { | ||||
|     if (OB_FAIL(part_to_task_array_map_.create(max(1, part_ch_array.count()), ObModIds::OB_SQL_PX))) { | ||||
|     if (OB_FAIL(part_to_task_array_map_.create(max(1, part_ch_array.count()), | ||||
|                                                ObModIds::OB_SQL_PX, | ||||
|                                                ObModIds::OB_HASH_NODE, | ||||
|                                                tenant_id))) { | ||||
|       LOG_WARN("fail create part to task array map", "count", part_ch_array.count(), K(ret)); | ||||
|     } else { | ||||
|       // In ObRepartSliceIdxCalc::init(), the support_vectorized_calc_ has been set to true. | ||||
| @ -304,9 +307,9 @@ int ObSlaveMapRepartIdxCalcBase::destroy() | ||||
|   return ret; | ||||
| } | ||||
|  | ||||
| int ObRepartRandomSliceIdxCalc::init() | ||||
| int ObRepartRandomSliceIdxCalc::init(uint64_t tenant_id) | ||||
| { | ||||
|   return ObSlaveMapRepartIdxCalcBase::init(); | ||||
|   return ObSlaveMapRepartIdxCalcBase::init(tenant_id); | ||||
| } | ||||
|  | ||||
| int ObRepartRandomSliceIdxCalc::destroy() | ||||
| @ -471,13 +474,13 @@ int ObAffinitizedRepartSliceIdxCalc::get_slice_idx_vec(const ObIArray<ObExpr*> & | ||||
|   return ret; | ||||
| } | ||||
|  | ||||
| int ObRepartSliceIdxCalc::init() | ||||
| int ObRepartSliceIdxCalc::init(uint64_t tenant_id) | ||||
| { | ||||
|   int ret = OB_SUCCESS; | ||||
|   if (px_repart_ch_map_.created()) { | ||||
|     ret = OB_INIT_TWICE; | ||||
|     LOG_WARN("this map has been init twice", K(ret)); | ||||
|   } else if (OB_FAIL(build_repart_ch_map(px_repart_ch_map_))) { | ||||
|   } else if (OB_FAIL(build_repart_ch_map(px_repart_ch_map_, tenant_id))) { | ||||
|     LOG_WARN("failed to build affi hash map", K(ret)); | ||||
|   } else if (OB_FAIL(setup_one_side_one_level_info())) { | ||||
|     LOG_WARN("fail to build one side on level map", K(ret)); | ||||
| @ -515,11 +518,14 @@ int ObRepartSliceIdxCalc::setup_one_side_one_level_info() | ||||
|   return ret; | ||||
| } | ||||
|  | ||||
| int ObRepartSliceIdxCalc::build_repart_ch_map(ObPxPartChMap &affinity_map) | ||||
| int ObRepartSliceIdxCalc::build_repart_ch_map(ObPxPartChMap &affinity_map, uint64_t tenant_id) | ||||
| { | ||||
|   int ret = OB_SUCCESS; | ||||
|   const ObPxPartChMapTMArray &part_ch_array = part_ch_info_.part_ch_array_; | ||||
|   if (OB_FAIL(affinity_map.create(max(1, part_ch_array.count()), ObModIds::OB_SQL_PX))) { | ||||
|   if (OB_FAIL(affinity_map.create(max(1, part_ch_array.count()), | ||||
|                                   ObModIds::OB_SQL_PX, | ||||
|                                   ObModIds::OB_HASH_NODE, | ||||
|                                   tenant_id))) { | ||||
|     LOG_WARN("fail create hashmap", "count", part_ch_array.count(), K(ret)); | ||||
|   } | ||||
|  | ||||
| @ -795,13 +801,13 @@ ObSlaveMapPkeyRangeIdxCalc::~ObSlaveMapPkeyRangeIdxCalc() | ||||
|   destroy(); | ||||
| } | ||||
|  | ||||
| int ObSlaveMapPkeyRangeIdxCalc::init() | ||||
| int ObSlaveMapPkeyRangeIdxCalc::init(uint64_t tenant_id) | ||||
| { | ||||
|   int ret = OB_SUCCESS; | ||||
|   if (OB_UNLIKELY(is_inited_)) { | ||||
|     ret = OB_INIT_TWICE; | ||||
|     LOG_WARN("init twice", K(ret), K(is_inited_)); | ||||
|   } else if (OB_FAIL(ObSlaveMapRepartIdxCalcBase::init())) { | ||||
|   } else if (OB_FAIL(ObSlaveMapRepartIdxCalcBase::init(tenant_id))) { | ||||
|     LOG_WARN("fail init base repart class", K(ret)); | ||||
|   } else if (OB_UNLIKELY(nullptr == calc_part_id_expr_ || sort_exprs_.count() <= 0)) { | ||||
|     ret = OB_INVALID_ARGUMENT; | ||||
| @ -1048,10 +1054,10 @@ int ObSlaveMapPkeyRangeIdxCalc::get_slice_idx( | ||||
| } | ||||
|  | ||||
| /*******************                 ObSlaveMapPkeyHashIdxCalc                 ********************/ | ||||
| int ObSlaveMapPkeyHashIdxCalc::init() | ||||
| int ObSlaveMapPkeyHashIdxCalc::init(uint64_t tenant_id) | ||||
| { | ||||
|   int ret = OB_SUCCESS; | ||||
|   if (OB_FAIL(ObSlaveMapRepartIdxCalcBase::init())) { | ||||
|   if (OB_FAIL(ObSlaveMapRepartIdxCalcBase::init(tenant_id))) { | ||||
|     LOG_WARN("fail init base repart class", K(ret)); | ||||
|   } else if (affi_hash_map_.created()) { | ||||
|     ret = OB_INIT_TWICE; | ||||
| @ -1339,10 +1345,10 @@ int ObNullAwareHashSliceIdCalc::get_slice_indexes(const ObIArray<ObExpr*> &exprs | ||||
|   return ret; | ||||
| } | ||||
|  | ||||
| int ObNullAwareAffinitizedRepartSliceIdxCalc::init() | ||||
| int ObNullAwareAffinitizedRepartSliceIdxCalc::init(uint64_t tenant_id) | ||||
| { | ||||
|   int ret = OB_SUCCESS; | ||||
|   OZ (ObRepartSliceIdxCalc::init()); | ||||
|   OZ (ObRepartSliceIdxCalc::init(tenant_id)); | ||||
|   OX (support_vectorized_calc_ = false); | ||||
|   return ret; | ||||
| } | ||||
|  | ||||
| @ -232,7 +232,7 @@ public: | ||||
|  | ||||
|   int init_partition_cache_map(); | ||||
|  | ||||
|   virtual int init(); | ||||
|   virtual int init(uint64_t tenant_id = OB_SERVER_TENANT_ID); | ||||
|  | ||||
|   virtual int destroy() { | ||||
|     int ret = OB_SUCCESS; | ||||
| @ -242,7 +242,7 @@ public: | ||||
|     return ret; | ||||
|   } | ||||
|  | ||||
|   int build_repart_ch_map(ObPxPartChMap &map); | ||||
|   int build_repart_ch_map(ObPxPartChMap &map, uint64_t tenant_id); | ||||
|   int build_part2tablet_id_map(); | ||||
| protected: | ||||
|   // this is a trick! | ||||
| @ -320,7 +320,7 @@ protected: | ||||
|   {} | ||||
|   ~ObSlaveMapRepartIdxCalcBase() = default; | ||||
| protected: | ||||
|   virtual int init() override; | ||||
|   virtual int init(uint64_t tenant_id = OB_SERVER_TENANT_ID) override; | ||||
|   virtual int destroy() override; | ||||
| protected: | ||||
|   // 存储同一个partition所对应的所有task id | ||||
| @ -390,7 +390,7 @@ public: | ||||
|   virtual int get_slice_idx(const ObIArray<ObExpr*> &exprs, | ||||
|                             ObEvalCtx &eval_ctx, | ||||
|                             int64_t &slice_idx) override; | ||||
|   virtual int init() override; | ||||
|   virtual int init(uint64_t tenant_id) override; | ||||
|   virtual int destroy() override; | ||||
| private: | ||||
|   int get_task_idx_by_tablet_id(int64_t tablet_id , int64_t &task_idx); | ||||
| @ -810,7 +810,7 @@ public: | ||||
|         sort_cmp_(sort_cmp_funs, sort_collations) | ||||
|   {} | ||||
|   virtual ~ObSlaveMapPkeyRangeIdxCalc(); | ||||
|   virtual int init() override; | ||||
|   virtual int init(uint64_t tenant_id = OB_SERVER_TENANT_ID) override; | ||||
|   virtual int destroy() override; | ||||
|   virtual int get_slice_idx( | ||||
|       const common::ObIArray<ObExpr*> &exprs, | ||||
| @ -932,7 +932,7 @@ public: | ||||
|   } | ||||
|   ~ObSlaveMapPkeyHashIdxCalc() = default; | ||||
|  | ||||
|   int init() override; | ||||
|   int init(uint64_t tenant_id = OB_SERVER_TENANT_ID) override; | ||||
|   int destroy() override; | ||||
|  | ||||
|   // for static engine | ||||
| @ -1091,7 +1091,7 @@ public: | ||||
|   } | ||||
|  | ||||
|   ~ObNullAwareAffinitizedRepartSliceIdxCalc() = default; | ||||
|   virtual int init() override; | ||||
|   virtual int init(uint64_t tenant_id) override; | ||||
|   virtual int get_slice_idx(const ObIArray<ObExpr*> &exprs, ObEvalCtx &eval_ctx, int64_t &slice_idx) | ||||
|   { | ||||
|     UNUSED(exprs); | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	 obdev
					obdev