提交 4bcd3214 编写于 作者: O obdev 提交者: ob-robot

fix auto mem mgr can not alloc enough merge way for ems sort && fix recompile...

fix auto mem mgr can not alloc enough merge way for ems sort && fix recompile view while resolve view failed
上级 a65db0d0
......@@ -962,6 +962,8 @@ int ObTableColumns::resolve_view_definition(
bool reset_column_infos = (OB_SUCCESS == ret) ? false : (lib::is_oracle_mode() ? true : false);
if (OB_UNLIKELY(OB_SUCCESS != ret && OB_ERR_VIEW_INVALID != ret)) {
LOG_WARN("failed to resolve view", K(ret));
} else if (OB_UNLIKELY(OB_ERR_VIEW_INVALID == ret && lib::is_mysql_mode())) {
// do nothing
} else if (OB_SUCCESS != (tmp_ret = ObSQLUtils::async_recompile_view(table_schema, select_stmt, reset_column_infos, *allocator, *session))) {
LOG_WARN("failed to add recompile view task", K(tmp_ret));
if (OB_ERR_TOO_LONG_COLUMN_LENGTH == tmp_ret) {
......
......@@ -1499,10 +1499,6 @@ int ObSortOpImpl::build_ems_heap(int64_t &merge_ways)
max_ways += 1;
c = c->get_next();
}
merge_ways = get_memory_limit() / ObChunkDatumStore::BLOCK_SIZE;
merge_ways = std::max(2L, merge_ways);
merge_ways = std::min(merge_ways, max_ways);
LOG_TRACE("do merge sort", K(first->level_), K(merge_ways), K(sort_chunks_.get_size()));
if (NULL == ems_heap_) {
if (OB_ISNULL(ems_heap_ = OB_NEWx(EMSHeap, (&mem_context_->get_malloc_allocator()),
......@@ -1513,6 +1509,26 @@ int ObSortOpImpl::build_ems_heap(int64_t &merge_ways)
} else {
ems_heap_->reset();
}
if (OB_SUCC(ret)) {
merge_ways = get_memory_limit() / ObChunkDatumStore::BLOCK_SIZE;
merge_ways = std::max(2L, merge_ways);
if (merge_ways < max_ways) {
bool dumped = false;
int64_t need_size = max_ways * ObChunkDatumStore::BLOCK_SIZE;
if (OB_FAIL(sql_mem_processor_.extend_max_memory_size(
&mem_context_->get_malloc_allocator(),
[&](int64_t max_memory_size) {
return max_memory_size < need_size;
},
dumped, mem_context_->used()))) {
LOG_WARN("failed to extend memory size", K(ret));
}
merge_ways = std::max(merge_ways, get_memory_limit() / ObChunkDatumStore::BLOCK_SIZE);
}
merge_ways = std::min(merge_ways, max_ways);
LOG_TRACE("do merge sort ", K(first->level_), K(merge_ways), K(sort_chunks_.get_size()), K(get_memory_limit()), K(sql_mem_processor_.get_profile()));
}
if (OB_SUCC(ret)) {
ObSortOpChunk *chunk = sort_chunks_.get_first();
for (int64_t i = 0; i < merge_ways && OB_SUCC(ret); i++) {
......
......@@ -4542,6 +4542,8 @@ int ObDMLResolver::do_expand_view(TableItem &view_item, ObChildStmtResolver &vie
bool reset_column_infos = (OB_SUCCESS == ret) ? false : (lib::is_oracle_mode() ? true : false);
if (OB_UNLIKELY(OB_SUCCESS != ret && OB_ERR_VIEW_INVALID != ret)) {
LOG_WARN("failed to resolve view", K(ret));
} else if (OB_UNLIKELY(OB_ERR_VIEW_INVALID == ret && lib::is_mysql_mode())) {
// do nothing
} else if (OB_SUCCESS != (tmp_ret = ObSQLUtils::async_recompile_view(*view_schema, view_stmt,reset_column_infos, *allocator_, *session_info_))) {
LOG_WARN("failed to add recompile view task", K(tmp_ret));
if (OB_ERR_TOO_LONG_COLUMN_LENGTH == tmp_ret) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册