[CP] fix bug of mem chunk size
This commit is contained in:
@ -12,10 +12,11 @@
|
|||||||
|
|
||||||
#define USING_LOG_PREFIX SERVER
|
#define USING_LOG_PREFIX SERVER
|
||||||
|
|
||||||
|
#include "share/rc/ob_tenant_base.h"
|
||||||
#include "observer/table_load/ob_table_load_assigned_memory_manager.h"
|
#include "observer/table_load/ob_table_load_assigned_memory_manager.h"
|
||||||
#include "observer/omt/ob_multi_tenant.h"
|
#include "observer/omt/ob_multi_tenant.h"
|
||||||
#include "share/rc/ob_tenant_base.h"
|
|
||||||
#include "observer/omt/ob_tenant.h"
|
#include "observer/omt/ob_tenant.h"
|
||||||
|
#include "storage/direct_load/ob_direct_load_mem_define.h"
|
||||||
|
|
||||||
namespace oceanbase
|
namespace oceanbase
|
||||||
{
|
{
|
||||||
@ -36,7 +37,7 @@ using namespace omt;
|
|||||||
ObTableLoadAssignedMemoryManager::ObTableLoadAssignedMemoryManager()
|
ObTableLoadAssignedMemoryManager::ObTableLoadAssignedMemoryManager()
|
||||||
: avail_sort_memory_(0),
|
: avail_sort_memory_(0),
|
||||||
avail_memory_(0),
|
avail_memory_(0),
|
||||||
sort_task_count_(0),
|
chunk_count_(0),
|
||||||
is_inited_(false)
|
is_inited_(false)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@ -66,9 +67,9 @@ int ObTableLoadAssignedMemoryManager::assign_memory(bool is_sort, int64_t assign
|
|||||||
LOG_WARN("ObTableLoadAssignedMemoryManager not init", KR(ret), KP(this));
|
LOG_WARN("ObTableLoadAssignedMemoryManager not init", KR(ret), KP(this));
|
||||||
} else {
|
} else {
|
||||||
ObMutexGuard guard(mutex_);
|
ObMutexGuard guard(mutex_);
|
||||||
sort_task_count_ += (is_sort ? 1 : 0);
|
chunk_count_ += (is_sort ? assign_memory / ObDirectLoadExternalMultiPartitionRowChunk::MIN_MEMORY_LIMIT : 0);
|
||||||
avail_sort_memory_ -= (is_sort ? 0 : assign_memory);
|
avail_sort_memory_ -= (is_sort ? 0 : assign_memory);
|
||||||
LOG_INFO("ObTableLoadAssignedMemoryManager::assign_memory", K(MTL_ID()), K(is_sort), K(assign_memory), K(sort_task_count_), K(avail_sort_memory_));
|
LOG_INFO("ObTableLoadAssignedMemoryManager::assign_memory", K(MTL_ID()), K(is_sort), K(chunk_count_), K(assign_memory), K(avail_sort_memory_));
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
@ -82,9 +83,9 @@ int ObTableLoadAssignedMemoryManager::recycle_memory(bool is_sort, int64_t assig
|
|||||||
LOG_WARN("ObTableLoadAssignedMemoryManager not init", KR(ret), KP(this));
|
LOG_WARN("ObTableLoadAssignedMemoryManager not init", KR(ret), KP(this));
|
||||||
} else {
|
} else {
|
||||||
ObMutexGuard guard(mutex_);
|
ObMutexGuard guard(mutex_);
|
||||||
sort_task_count_ -= (is_sort ? 1 : 0);
|
chunk_count_ -= (is_sort ? assign_memory / ObDirectLoadExternalMultiPartitionRowChunk::MIN_MEMORY_LIMIT : 0);
|
||||||
avail_sort_memory_ += (is_sort ? 0 : assign_memory);
|
avail_sort_memory_ += (is_sort ? 0 : assign_memory);
|
||||||
LOG_INFO("ObTableLoadAssignedMemoryManager::recycle_memory", K(MTL_ID()), K(is_sort), K(assign_memory), K(sort_task_count_), K(avail_sort_memory_));
|
LOG_INFO("ObTableLoadAssignedMemoryManager::recycle_memory", K(MTL_ID()), K(is_sort), K(chunk_count_), K(assign_memory), K(avail_sort_memory_));
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
@ -123,11 +124,11 @@ int ObTableLoadAssignedMemoryManager::get_sort_memory(int64_t &sort_memory)
|
|||||||
LOG_WARN("ObTableLoadAssignedMemoryManager not init", KR(ret), KP(this));
|
LOG_WARN("ObTableLoadAssignedMemoryManager not init", KR(ret), KP(this));
|
||||||
} else {
|
} else {
|
||||||
ObMutexGuard guard(mutex_);
|
ObMutexGuard guard(mutex_);
|
||||||
if (OB_UNLIKELY(sort_task_count_ == 0)) {
|
if (OB_UNLIKELY(chunk_count_ == 0)) {
|
||||||
ret = OB_ERR_UNEXPECTED;
|
ret = OB_ERR_UNEXPECTED;
|
||||||
LOG_WARN("unexpected sort_task_count_ equal to zero", KR(ret));
|
LOG_WARN("unexpected chunk_count_ equal to zero", KR(ret));
|
||||||
} else {
|
} else {
|
||||||
sort_memory = avail_sort_memory_ / sort_task_count_;
|
sort_memory = avail_sort_memory_ / chunk_count_;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -39,7 +39,7 @@ public:
|
|||||||
private:
|
private:
|
||||||
int64_t avail_sort_memory_;
|
int64_t avail_sort_memory_;
|
||||||
int64_t avail_memory_;
|
int64_t avail_memory_;
|
||||||
int64_t sort_task_count_;
|
int64_t chunk_count_;
|
||||||
mutable lib::ObMutex mutex_;
|
mutable lib::ObMutex mutex_;
|
||||||
bool is_inited_;
|
bool is_inited_;
|
||||||
};
|
};
|
||||||
|
|||||||
@ -109,8 +109,6 @@ int ObDirectLoadMemLoader::work()
|
|||||||
sort_memory = mem_ctx_->table_data_desc_.mem_chunk_size_;
|
sort_memory = mem_ctx_->table_data_desc_.mem_chunk_size_;
|
||||||
} else if (OB_FAIL(ObTableLoadService::get_sort_memory(sort_memory))) {
|
} else if (OB_FAIL(ObTableLoadService::get_sort_memory(sort_memory))) {
|
||||||
LOG_WARN("fail to get sort memory", KR(ret));
|
LOG_WARN("fail to get sort memory", KR(ret));
|
||||||
} else {
|
|
||||||
sort_memory /= mem_ctx_->table_data_desc_.max_mem_chunk_count_;
|
|
||||||
}
|
}
|
||||||
if (OB_SUCC(ret)) {
|
if (OB_SUCC(ret)) {
|
||||||
if (OB_FAIL(chunk->init(MTL_ID(), sort_memory))) {
|
if (OB_FAIL(chunk->init(MTL_ID(), sort_memory))) {
|
||||||
|
|||||||
@ -207,8 +207,6 @@ int ObDirectLoadMultipleHeapTableSorter::work()
|
|||||||
sort_memory = mem_ctx_->table_data_desc_.heap_table_mem_chunk_size_;
|
sort_memory = mem_ctx_->table_data_desc_.heap_table_mem_chunk_size_;
|
||||||
} else if (OB_FAIL(ObTableLoadService::get_sort_memory(sort_memory))) {
|
} else if (OB_FAIL(ObTableLoadService::get_sort_memory(sort_memory))) {
|
||||||
LOG_WARN("fail to get sort memory", KR(ret));
|
LOG_WARN("fail to get sort memory", KR(ret));
|
||||||
} else {
|
|
||||||
sort_memory /= mem_ctx_->table_data_desc_.session_count_;
|
|
||||||
}
|
}
|
||||||
if (OB_SUCC(ret)) {
|
if (OB_SUCC(ret)) {
|
||||||
chunk = OB_NEW(ChunkType, ObMemAttr(MTL_ID(), "TLD_MemChunkVal"), sort_memory);
|
chunk = OB_NEW(ChunkType, ObMemAttr(MTL_ID(), "TLD_MemChunkVal"), sort_memory);
|
||||||
|
|||||||
Reference in New Issue
Block a user