Incorporating vectorization 2.0, modify the calculation method for max_batch_size.

This commit is contained in:
qingsuijiu
2024-04-22 09:55:49 +00:00
committed by ob-robot
parent 327e04ad45
commit b74c782221

View File

@ -1987,9 +1987,23 @@ bool ObStaticEngineExprCG::is_vectorized_expr(const ObRawExpr *raw_expr) const
int ObStaticEngineExprCG::compute_max_batch_size(const ObRawExpr *raw_expr)
{
// expr_datums_header_size
int64_t irrelevant = sizeof(ObEvalInfo) + 1 + 1;
// 1 refer to three bitmap (2 in expr_datums_header_size, 1 in rich_format_size)
int64_t relevant = sizeof(ObDatum) + 1;
// reserve_datums_buf_len
const ObExprResType &result_type = raw_expr->get_result_type();
return (MAX_FRAME_SIZE - sizeof(ObEvalInfo)) /
(1 + sizeof(ObDatum) + reserve_data_consume(result_type.get_type(), result_type.get_precision()));
relevant += reserve_data_consume(result_type.get_type(), result_type.get_precision());
// rich_format_size
if (use_rich_format()) {
ObExpr *rt_expr = get_rt_expr(*raw_expr);
if (OB_ISNULL(rt_expr) || !rt_expr->is_fixed_length_data_) {
irrelevant += sizeof(uint32_t) + sizeof(ObDynReserveBuf);
relevant += sizeof(uint32_t) + sizeof(char *);
}
irrelevant += sizeof(VectorHeader) + 1;
}
return (MAX_FRAME_SIZE - irrelevant) / relevant;
}
// this is used for dynamic evaluated questionmark exprs