[CP] record piece entity memory
This commit is contained in:
parent
b88eb76b6d
commit
244894e676
@ -368,24 +368,23 @@ int ObPiece::piece_init(ObSQLSessionInfo &session,
|
|||||||
lib::ContextParam param;
|
lib::ContextParam param;
|
||||||
param.set_mem_attr(session.get_effective_tenant_id(),
|
param.set_mem_attr(session.get_effective_tenant_id(),
|
||||||
ObModIds::OB_PL_TEMP, ObCtxIds::DEFAULT_CTX_ID);
|
ObModIds::OB_PL_TEMP, ObCtxIds::DEFAULT_CTX_ID);
|
||||||
param.set_page_size(OB_MALLOC_BIG_BLOCK_SIZE);
|
param.set_page_size(OB_MALLOC_NORMAL_BLOCK_SIZE);
|
||||||
if (OB_FAIL((static_cast<ObPieceCache*>(session.get_piece_cache()))
|
if (OB_FAIL((static_cast<ObPieceCache*>(session.get_piece_cache()))
|
||||||
->mem_context_->CREATE_CONTEXT(entity, param))) {
|
->mem_context_->CREATE_CONTEXT(entity_, param))) {
|
||||||
LOG_WARN("failed to create ref cursor entity", K(ret));
|
LOG_WARN("failed to create ref cursor entity", K(ret));
|
||||||
} else if (OB_ISNULL(entity)) {
|
} else if (OB_ISNULL(entity_)) {
|
||||||
ret = OB_ALLOCATE_MEMORY_FAILED;
|
ret = OB_ALLOCATE_MEMORY_FAILED;
|
||||||
LOG_WARN("failed to alloc ref cursor entity", K(ret));
|
LOG_WARN("failed to alloc ref cursor entity", K(ret));
|
||||||
} else {
|
} else {
|
||||||
void *buf = NULL;
|
void *buf = NULL;
|
||||||
ObPieceBufferArray *buf_array = NULL;
|
ObPieceBufferArray *buf_array = NULL;
|
||||||
ObIAllocator *alloc = &entity->get_arena_allocator();
|
ObIAllocator *alloc = &entity_->get_arena_allocator();
|
||||||
OV (OB_NOT_NULL(buf = alloc->alloc(sizeof(ObPieceBufferArray))),
|
OV (OB_NOT_NULL(buf = alloc->alloc(sizeof(ObPieceBufferArray))),
|
||||||
OB_ALLOCATE_MEMORY_FAILED, sizeof(ObPieceBufferArray));
|
OB_ALLOCATE_MEMORY_FAILED, sizeof(ObPieceBufferArray));
|
||||||
OX (MEMSET(buf, 0, sizeof(ObPieceBufferArray)));
|
OX (MEMSET(buf, 0, sizeof(ObPieceBufferArray)));
|
||||||
OV (OB_NOT_NULL(buf_array = new (buf) ObPieceBufferArray(alloc)));
|
OV (OB_NOT_NULL(buf_array = new (buf) ObPieceBufferArray(alloc)));
|
||||||
OZ (buf_array->reserve(OB_MAX_PIECE_COUNT));
|
OZ (buf_array->reserve(OB_MAX_PIECE_COUNT));
|
||||||
if (OB_SUCC(ret)) {
|
if (OB_SUCC(ret)) {
|
||||||
set_allocator(alloc);
|
|
||||||
set_buffer_array(buf_array);
|
set_buffer_array(buf_array);
|
||||||
} else {
|
} else {
|
||||||
ret = OB_ERR_UNEXPECTED;
|
ret = OB_ERR_UNEXPECTED;
|
||||||
|
@ -159,17 +159,18 @@ public:
|
|||||||
param_id_(-1),
|
param_id_(-1),
|
||||||
pos_(0),
|
pos_(0),
|
||||||
buffer_array_(NULL),
|
buffer_array_(NULL),
|
||||||
allocator_(NULL),
|
|
||||||
is_null_map_(),
|
is_null_map_(),
|
||||||
err_ret_(OB_SUCCESS) {}
|
err_ret_(OB_SUCCESS),
|
||||||
|
entity_(nullptr) {}
|
||||||
~ObPiece() { reset(); }
|
~ObPiece() { reset(); }
|
||||||
void reset()
|
void reset()
|
||||||
{
|
{
|
||||||
if (NULL != buffer_array_) {
|
if (NULL != buffer_array_) {
|
||||||
reset_buffer_array();
|
reset_buffer_array();
|
||||||
}
|
}
|
||||||
if (NULL != allocator_) {
|
if (nullptr != entity_) {
|
||||||
allocator_->reset();
|
DESTROY_CONTEXT(entity_);
|
||||||
|
entity_ = nullptr;
|
||||||
}
|
}
|
||||||
stmt_id_ = 0;
|
stmt_id_ = 0;
|
||||||
param_id_ = -1;
|
param_id_ = -1;
|
||||||
@ -182,7 +183,7 @@ public:
|
|||||||
for (uint64_t i = 0; i < buffer_array_->count(); i++) {
|
for (uint64_t i = 0; i < buffer_array_->count(); i++) {
|
||||||
ObPieceBuffer piece_buffer = buffer_array_->at(i);
|
ObPieceBuffer piece_buffer = buffer_array_->at(i);
|
||||||
piece_buffer.~ObPieceBuffer();
|
piece_buffer.~ObPieceBuffer();
|
||||||
allocator_->free(&piece_buffer);
|
entity_->get_arena_allocator().free(&piece_buffer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -193,8 +194,7 @@ public:
|
|||||||
void set_position(uint64_t pos) { pos_ = pos; }
|
void set_position(uint64_t pos) { pos_ = pos; }
|
||||||
uint64_t get_position() { return pos_; }
|
uint64_t get_position() { return pos_; }
|
||||||
void add_position() { pos_++; }
|
void add_position() { pos_++; }
|
||||||
void set_allocator(ObIAllocator *alloc) { allocator_ = alloc; }
|
ObIAllocator *get_allocator() { return nullptr != entity_ ? &entity_->get_arena_allocator() : NULL; }
|
||||||
ObIAllocator *get_allocator() { return allocator_; }
|
|
||||||
common::ObBitSet<> &get_is_null_map() { return is_null_map_; }
|
common::ObBitSet<> &get_is_null_map() { return is_null_map_; }
|
||||||
void get_is_null_map(char *map, int64_t count) {
|
void get_is_null_map(char *map, int64_t count) {
|
||||||
for (int64_t i = 0; i<count; i++) {
|
for (int64_t i = 0; i<count; i++) {
|
||||||
@ -213,9 +213,9 @@ private:
|
|||||||
uint16_t param_id_;
|
uint16_t param_id_;
|
||||||
uint64_t pos_;
|
uint64_t pos_;
|
||||||
ObPieceBufferArray *buffer_array_;
|
ObPieceBufferArray *buffer_array_;
|
||||||
ObIAllocator *allocator_;
|
|
||||||
common::ObBitSet<> is_null_map_;
|
common::ObBitSet<> is_null_map_;
|
||||||
int err_ret_;
|
int err_ret_;
|
||||||
|
lib::MemoryContext entity_;
|
||||||
}; // end of class ObPiece
|
}; // end of class ObPiece
|
||||||
|
|
||||||
class ObPieceCache {
|
class ObPieceCache {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user