fix pwj table memory bloat
This commit is contained in:
@ -27,6 +27,7 @@ class ObOptimizerContext;
|
|||||||
class ObDMLStmt;
|
class ObDMLStmt;
|
||||||
class ObLogPlan;
|
class ObLogPlan;
|
||||||
|
|
||||||
|
//Do not allocate a PwjTable on the heap. If it is necessary to allocate a PwjTable on the heap, manually free it after its lifecycle ends.
|
||||||
struct PwjTable {
|
struct PwjTable {
|
||||||
PwjTable()
|
PwjTable()
|
||||||
: phy_table_loc_info_(NULL),
|
: phy_table_loc_info_(NULL),
|
||||||
@ -56,7 +57,7 @@ struct PwjTable {
|
|||||||
K_(server_list));
|
K_(server_list));
|
||||||
|
|
||||||
const ObCandiTableLoc *phy_table_loc_info_;
|
const ObCandiTableLoc *phy_table_loc_info_;
|
||||||
ObSEArray<common::ObAddr, 8, common::ModulePageAllocator, true> server_list_;
|
ObSEArray<common::ObAddr, 8> server_list_;
|
||||||
// 分区级别
|
// 分区级别
|
||||||
share::schema::ObPartitionLevel part_level_;
|
share::schema::ObPartitionLevel part_level_;
|
||||||
// 一级分区类型
|
// 一级分区类型
|
||||||
@ -73,13 +74,13 @@ struct PwjTable {
|
|||||||
int64_t part_number_;
|
int64_t part_number_;
|
||||||
// phy_table_location_info_中所有的partition_id(物理分区id)
|
// phy_table_location_info_中所有的partition_id(物理分区id)
|
||||||
// ObPwjComparer在生成_id的映射关系时要按照左表这个数组中的partition_id的顺序生成
|
// ObPwjComparer在生成_id的映射关系时要按照左表这个数组中的partition_id的顺序生成
|
||||||
common::ObSEArray<uint64_t, 8, common::ModulePageAllocator, true> ordered_tablet_ids_;
|
common::ObSEArray<uint64_t, 8> ordered_tablet_ids_;
|
||||||
// phy_table_location_info_中每一个partition_id(物理分区id)的
|
// phy_table_location_info_中每一个partition_id(物理分区id)的
|
||||||
// part_id(一级逻辑分区id)在part_array中的偏移
|
// part_id(一级逻辑分区id)在part_array中的偏移
|
||||||
common::ObSEArray<int64_t, 8, common::ModulePageAllocator, true> all_partition_indexes_;
|
common::ObSEArray<int64_t, 8> all_partition_indexes_;
|
||||||
// phy_table_location_info_中每一个partition_id(物理分区id)的
|
// phy_table_location_info_中每一个partition_id(物理分区id)的
|
||||||
// subpart_id(二级逻辑分区id)在subpart_array中的偏移
|
// subpart_id(二级逻辑分区id)在subpart_array中的偏移
|
||||||
common::ObSEArray<int64_t, 8, common::ModulePageAllocator, true> all_subpartition_indexes_;
|
common::ObSEArray<int64_t, 8> all_subpartition_indexes_;
|
||||||
};
|
};
|
||||||
|
|
||||||
// TODO yibo 用PartitionIdArray的指针作为value, 否则每次get都要拷贝一次array
|
// TODO yibo 用PartitionIdArray的指针作为value, 否则每次get都要拷贝一次array
|
||||||
@ -95,6 +96,7 @@ typedef common::hash::ObHashMap<uint64_t, uint64_t, common::hash::NoPthreadDefen
|
|||||||
typedef common::hash::ObHashMap<uint64_t, const ObCandiTabletLoc *,
|
typedef common::hash::ObHashMap<uint64_t, const ObCandiTabletLoc *,
|
||||||
common::hash::NoPthreadDefendMode> TabletIdLocationMap;
|
common::hash::NoPthreadDefendMode> TabletIdLocationMap;
|
||||||
|
|
||||||
|
//Do not allocate a ObPwjComparer on the heap. If it is necessary to allocate a ObPwjComparer on the heap, manually free it after its lifecycle ends.
|
||||||
class ObPwjComparer
|
class ObPwjComparer
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -176,7 +178,7 @@ protected:
|
|||||||
// 非严格模式要求两个基表的数据分布节点相同
|
// 非严格模式要求两个基表的数据分布节点相同
|
||||||
bool is_strict_;
|
bool is_strict_;
|
||||||
// 保存一组pwj约束涉及到的基表信息
|
// 保存一组pwj约束涉及到的基表信息
|
||||||
common::ObSEArray<PwjTable, 4, common::ModulePageAllocator, true> pwj_tables_;
|
common::ObSEArray<PwjTable, 4> pwj_tables_;
|
||||||
static const int64_t MIN_ID_LOCATION_BUCKET_NUMBER;
|
static const int64_t MIN_ID_LOCATION_BUCKET_NUMBER;
|
||||||
static const int64_t DEFAULT_ID_ID_BUCKET_NUMBER;
|
static const int64_t DEFAULT_ID_ID_BUCKET_NUMBER;
|
||||||
DISALLOW_COPY_AND_ASSIGN(ObPwjComparer);
|
DISALLOW_COPY_AND_ASSIGN(ObPwjComparer);
|
||||||
|
|||||||
Reference in New Issue
Block a user