fix: fix das memory expand induced by das used memeory calculation error

This commit is contained in:
obdev
2023-03-21 14:54:12 +00:00
committed by ob-robot
parent 0b7ea211ed
commit e53df2eb6b
3 changed files with 12 additions and 5 deletions

View File

@ -928,12 +928,14 @@ struct ObDMLRtCtx
ObDMLRtCtx(ObEvalCtx &eval_ctx, ObExecContext &exec_ctx, ObTableModifyOp &op)
: das_ref_(eval_ctx, exec_ctx),
das_task_status_(),
op_(op)
op_(op),
cached_row_size_(0)
{ }
void reuse()
{
das_ref_.reuse();
cached_row_size_ = 0;
}
void cleanup()
@ -950,10 +952,13 @@ struct ObDMLRtCtx
{ return das_task_status_.need_pick_del_task_first(); }
bool need_non_sub_full_task()
{ return das_task_status_.need_non_sub_full_task(); }
void add_cached_row_size(const int64_t row_size) { cached_row_size_ += row_size; }
int64_t get_cached_row_size() const { return cached_row_size_; }
ObDASRef das_ref_;
DasTaskStatus das_task_status_;
ObTableModifyOp &op_;
int64_t cached_row_size_;
};
template <typename T>

View File

@ -1549,16 +1549,18 @@ int ObDMLService::write_row_to_das_op(const ObDASDMLBaseCtDef &ctdef,
if (OB_SUCC(ret)) {
if (OB_FAIL(dml_op->write_row(row, dml_rtctx.get_eval_ctx(), stored_row, buffer_full))) {
LOG_WARN("insert row to das dml op buffer failed", K(ret), K(ctdef), K(rtdef));
} else if (OB_NOT_NULL(stored_row)) {
dml_rtctx.add_cached_row_size(stored_row->row_size_);
}
LOG_DEBUG("write row to das op", K(ret), K(buffer_full), "op_type", N,
"table_id", ctdef.table_id_, "index_tid", ctdef.index_tid_,
"row", ROWEXPR2STR(dml_rtctx.get_eval_ctx(), row));
"row", ROWEXPR2STR(dml_rtctx.get_eval_ctx(), row), "row_size", stored_row->row_size_);
}
//3. if buffer is full, frozen node, create a new das op to add row
if (OB_SUCC(ret) && buffer_full) {
need_retry = true;
if (REACH_COUNT_INTERVAL(10)) { // print log per 10 times.
LOG_INFO("DAS write buffer full, ", K(dml_op->get_row_cnt()), K(dml_rtctx.das_ref_.get_das_mem_used()));
LOG_INFO("DAS write buffer full, ", K(dml_op->get_row_cnt()), K(dml_rtctx.das_ref_.get_das_mem_used()), K(dml_rtctx.get_cached_row_size()));
}
dml_rtctx.das_ref_.set_frozen_node();
}

View File

@ -1099,9 +1099,9 @@ int ObTableModifyOp::submit_all_dml_task()
int ObTableModifyOp::discharge_das_write_buffer()
{
int ret = OB_SUCCESS;
if (dml_rtctx_.das_ref_.get_das_mem_used() >= das::OB_DAS_MAX_TOTAL_PACKET_SIZE || execute_single_row_) {
if (dml_rtctx_.get_cached_row_size() >= das::OB_DAS_MAX_TOTAL_PACKET_SIZE || execute_single_row_) {
LOG_INFO("DASWriteBuffer full or need single row execution, now to write storage",
"buffer memory", dml_rtctx_.das_ref_.get_das_alloc().used(), K(execute_single_row_));
"buffer memory", dml_rtctx_.das_ref_.get_das_alloc().used(), K(execute_single_row_), K(dml_rtctx_.get_cached_row_size()));
ret = submit_all_dml_task();
}
return ret;