fix auto mem mgr can not alloc enough merge way for ems sort && fix recompile view while resolve view failed
This commit is contained in:
parent
a65db0d0f8
commit
4bcd321454
@ -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) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user