Reduce rescan pin too much cache handle
This commit is contained in:
1
deps/oblib/src/common/ob_common_types.h
vendored
1
deps/oblib/src/common/ob_common_types.h
vendored
@ -174,6 +174,7 @@ struct ObQueryFlag
|
|||||||
}
|
}
|
||||||
void reset() { flag_ = 0; }
|
void reset() { flag_ = 0; }
|
||||||
inline bool is_reverse_scan() const { return scan_order_ == Reverse; }
|
inline bool is_reverse_scan() const { return scan_order_ == Reverse; }
|
||||||
|
inline bool is_ordered_scan() const { return scan_order_ == ObQueryFlag::Forward || scan_order_ == ObQueryFlag::Reverse; }
|
||||||
inline bool is_daily_merge() const { return daily_merge_; }
|
inline bool is_daily_merge() const { return daily_merge_; }
|
||||||
inline bool is_rmmb_optimized() const { return rmmb_optimize_; }
|
inline bool is_rmmb_optimized() const { return rmmb_optimize_; }
|
||||||
inline bool is_whole_macro_scan() const { return whole_macro_scan_; }
|
inline bool is_whole_macro_scan() const { return whole_macro_scan_; }
|
||||||
|
|||||||
@ -105,10 +105,6 @@ int ObIndexTreePrefetcher::switch_context(
|
|||||||
for (int64_t i = 0; i < DEFAULT_GET_MICRO_DATA_HANDLE_CNT; ++i) {
|
for (int64_t i = 0; i < DEFAULT_GET_MICRO_DATA_HANDLE_CNT; ++i) {
|
||||||
micro_handles_[i].reset();
|
micro_handles_[i].reset();
|
||||||
}
|
}
|
||||||
micro_block_handle_mgr_.reset();
|
|
||||||
if (OB_FAIL(micro_block_handle_mgr_.init(true, false, *access_ctx.stmt_allocator_))) {
|
|
||||||
LOG_WARN("failed to init block handle mgr", K(ret));
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
rescan_cnt_++;
|
rescan_cnt_++;
|
||||||
if (rescan_cnt_ >= MAX_RESCAN_HOLD_LIMIT) {
|
if (rescan_cnt_ >= MAX_RESCAN_HOLD_LIMIT) {
|
||||||
@ -449,7 +445,7 @@ int ObIndexTreeMultiPrefetcher::init(
|
|||||||
LOG_WARN("range count should be greater than 0", K(ret), K(range_count));
|
LOG_WARN("range count should be greater than 0", K(ret), K(range_count));
|
||||||
} else if (OB_FAIL(ext_read_handles_.prepare_reallocate(max_handle_prefetching_cnt_))) {
|
} else if (OB_FAIL(ext_read_handles_.prepare_reallocate(max_handle_prefetching_cnt_))) {
|
||||||
LOG_WARN("Fail to init read_handles", K(ret), K(max_handle_prefetching_cnt_));
|
LOG_WARN("Fail to init read_handles", K(ret), K(max_handle_prefetching_cnt_));
|
||||||
} else if (OB_FAIL(micro_block_handle_mgr_.init(range_count > 1, false, *access_ctx.stmt_allocator_))) {
|
} else if (OB_FAIL(micro_block_handle_mgr_.init(range_count > 1, access_ctx_->query_flag_.is_ordered_scan(), *access_ctx.stmt_allocator_))) {
|
||||||
LOG_WARN("failed to init block handle mgr", K(ret));
|
LOG_WARN("failed to init block handle mgr", K(ret));
|
||||||
} else {
|
} else {
|
||||||
is_inited_ = true;
|
is_inited_ = true;
|
||||||
@ -488,10 +484,6 @@ int ObIndexTreeMultiPrefetcher::switch_context(
|
|||||||
for (int64_t i = 0; i < ext_read_handles_.count(); ++i) {
|
for (int64_t i = 0; i < ext_read_handles_.count(); ++i) {
|
||||||
ext_read_handles_.at(i).reset();
|
ext_read_handles_.at(i).reset();
|
||||||
}
|
}
|
||||||
micro_block_handle_mgr_.reset();
|
|
||||||
if (OB_FAIL(micro_block_handle_mgr_.init(true, false, *access_ctx.stmt_allocator_))) {
|
|
||||||
LOG_WARN("failed to init block handle mgr", K(ret));
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
rescan_cnt_++;
|
rescan_cnt_++;
|
||||||
if (rescan_cnt_ >= MAX_RESCAN_HOLD_LIMIT) {
|
if (rescan_cnt_ >= MAX_RESCAN_HOLD_LIMIT) {
|
||||||
@ -740,7 +732,7 @@ int ObIndexTreeMultiPassPrefetcher::init(
|
|||||||
bool is_multi_range = false;
|
bool is_multi_range = false;
|
||||||
if (OB_FAIL(init_basic_info(iter_type, sstable, access_ctx, query_range, is_multi_range))) {
|
if (OB_FAIL(init_basic_info(iter_type, sstable, access_ctx, query_range, is_multi_range))) {
|
||||||
LOG_WARN("Fail to init basic info", K(ret), K(access_ctx));
|
LOG_WARN("Fail to init basic info", K(ret), K(access_ctx));
|
||||||
} else if (OB_FAIL(micro_block_handle_mgr_.init(is_multi_range, false, *access_ctx.stmt_allocator_))) {
|
} else if (OB_FAIL(micro_block_handle_mgr_.init(is_multi_range, access_ctx_->query_flag_.is_ordered_scan(), *access_ctx.stmt_allocator_))) {
|
||||||
LOG_WARN("failed to init block handle mgr", K(ret));
|
LOG_WARN("failed to init block handle mgr", K(ret));
|
||||||
} else {
|
} else {
|
||||||
for (int64_t level = 0; OB_SUCC(ret) && level < index_tree_height_; level++) {
|
for (int64_t level = 0; OB_SUCC(ret) && level < index_tree_height_; level++) {
|
||||||
@ -781,10 +773,6 @@ int ObIndexTreeMultiPassPrefetcher::switch_context(
|
|||||||
for (int16_t level = 0; level < tree_handles_.count(); level++) {
|
for (int16_t level = 0; level < tree_handles_.count(); level++) {
|
||||||
tree_handles_.at(level).reset();
|
tree_handles_.at(level).reset();
|
||||||
}
|
}
|
||||||
micro_block_handle_mgr_.reset();
|
|
||||||
if (OB_FAIL(micro_block_handle_mgr_.init(true, false, *access_ctx.stmt_allocator_))) {
|
|
||||||
LOG_WARN("failed to init block handle mgr", K(ret));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (OB_SUCC(ret)) {
|
if (OB_SUCC(ret)) {
|
||||||
|
|||||||
@ -191,8 +191,7 @@ int ObTableScanRange::init_rowkeys(const common::ObIArray<common::ObNewRange> &r
|
|||||||
if (OB_SUCC(ret)) {
|
if (OB_SUCC(ret)) {
|
||||||
if (rowkeys_.empty()) {
|
if (rowkeys_.empty()) {
|
||||||
status_ = EMPTY;
|
status_ = EMPTY;
|
||||||
} else if (rowkeys_.count() > 1 && nullptr != datum_utils
|
} else if (rowkeys_.count() > 1 && nullptr != datum_utils && scan_flag.is_ordered_scan()) {
|
||||||
&& (scan_flag.scan_order_ == ObQueryFlag::Forward || scan_flag.scan_order_ == ObQueryFlag::Reverse)) {
|
|
||||||
ObDatumComparor<ObDatumRowkey> comparor(*datum_utils, ret, scan_flag.is_reverse_scan());
|
ObDatumComparor<ObDatumRowkey> comparor(*datum_utils, ret, scan_flag.is_reverse_scan());
|
||||||
std::sort(rowkeys_.begin(), rowkeys_.end(), comparor);
|
std::sort(rowkeys_.begin(), rowkeys_.end(), comparor);
|
||||||
if (OB_FAIL(ret)) {
|
if (OB_FAIL(ret)) {
|
||||||
@ -240,8 +239,7 @@ int ObTableScanRange::init_ranges(const common::ObIArray<common::ObNewRange> &ra
|
|||||||
if (OB_SUCC(ret)) {
|
if (OB_SUCC(ret)) {
|
||||||
if (ranges_.empty()) {
|
if (ranges_.empty()) {
|
||||||
status_ = EMPTY;
|
status_ = EMPTY;
|
||||||
} else if (ranges_.count() > 1 && nullptr != datum_utils
|
} else if (ranges_.count() > 1 && nullptr != datum_utils && scan_flag.is_ordered_scan()) {
|
||||||
&& (scan_flag.scan_order_ == ObQueryFlag::Forward || scan_flag.scan_order_ == ObQueryFlag::Reverse)) {
|
|
||||||
ObDatumComparor<ObDatumRange> comparor(*datum_utils, ret, scan_flag.is_reverse_scan());
|
ObDatumComparor<ObDatumRange> comparor(*datum_utils, ret, scan_flag.is_reverse_scan());
|
||||||
std::sort(ranges_.begin(), ranges_.end(), comparor);
|
std::sort(ranges_.begin(), ranges_.end(), comparor);
|
||||||
if (OB_FAIL(ret)) {
|
if (OB_FAIL(ret)) {
|
||||||
@ -288,8 +286,7 @@ int ObTableScanRange::init_ranges_in_skip_scan(const common::ObIArray<common::Ob
|
|||||||
if (OB_SUCC(ret)) {
|
if (OB_SUCC(ret)) {
|
||||||
if (wrapped_ranges_.empty()) {
|
if (wrapped_ranges_.empty()) {
|
||||||
status_ = EMPTY;
|
status_ = EMPTY;
|
||||||
} else if (wrapped_ranges_.count() > 1 && nullptr != datum_utils
|
} else if (wrapped_ranges_.count() > 1 && nullptr != datum_utils && scan_flag.is_ordered_scan()) {
|
||||||
&& (scan_flag.scan_order_ == ObQueryFlag::Forward || scan_flag.scan_order_ == ObQueryFlag::Reverse)) {
|
|
||||||
ObDatumComparor<ObSkipScanWrappedRange> comparor(*datum_utils, ret, scan_flag.is_reverse_scan());
|
ObDatumComparor<ObSkipScanWrappedRange> comparor(*datum_utils, ret, scan_flag.is_reverse_scan());
|
||||||
std::sort(wrapped_ranges_.begin(), wrapped_ranges_.end(), comparor);
|
std::sort(wrapped_ranges_.begin(), wrapped_ranges_.end(), comparor);
|
||||||
if (OB_FAIL(ret)) {
|
if (OB_FAIL(ret)) {
|
||||||
|
|||||||
Reference in New Issue
Block a user