Reduce rescan pin too much cache handle

This commit is contained in:
obdev
2023-03-08 03:41:18 +00:00
committed by ob-robot
parent 91980f6167
commit e785ebb482
3 changed files with 6 additions and 20 deletions

View File

@ -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_; }

View File

@ -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)) {

View File

@ -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)) {