revert skip base version

This commit is contained in:
z404289981
2024-04-02 07:10:50 +00:00
committed by ob-robot
parent b6ea5e8416
commit c3e7e879b9
4 changed files with 6 additions and 55 deletions

View File

@ -1549,7 +1549,7 @@ int ObIndexTreeMultiPassPrefetcher<DATA_PREFETCH_DEPTH, INDEX_PREFETCH_DEPTH>::O
&& OB_FAIL(sstable_index_filter->check_range(prefetcher.iter_param_->read_info_, index_info, && OB_FAIL(sstable_index_filter->check_range(prefetcher.iter_param_->read_info_, index_info,
*(prefetcher.access_ctx_->allocator_)))) { *(prefetcher.access_ctx_->allocator_)))) {
LOG_WARN("Fail to check if can skip prefetch", K(ret), K(index_info)); LOG_WARN("Fail to check if can skip prefetch", K(ret), K(index_info));
} else if (index_info.is_filter_always_false() || prefetcher.skip_index_block(index_info)) { } else if (index_info.is_filter_always_false()) {
} else if (nullptr != prefetcher.agg_row_store_ && prefetcher.agg_row_store_->can_agg_index_info(index_info)) { } else if (nullptr != prefetcher.agg_row_store_ && prefetcher.agg_row_store_->can_agg_index_info(index_info)) {
if (OB_FAIL(prefetcher.agg_row_store_->fill_index_info(index_info))) { if (OB_FAIL(prefetcher.agg_row_store_->fill_index_info(index_info))) {
LOG_WARN("Fail to agg index info", K(ret), KPC(this)); LOG_WARN("Fail to agg index info", K(ret), KPC(this));

View File

@ -173,10 +173,6 @@ protected:
ObSSTable &sstable, ObSSTable &sstable,
const ObTableIterParam &iter_param, const ObTableIterParam &iter_param,
ObTableAccessContext &access_ctx); ObTableAccessContext &access_ctx);
OB_INLINE bool skip_index_block(const ObMicroIndexInfo &index_block_info)
{
return sstable_->is_multi_version_minor_sstable() && !index_block_info.contain_uncommitted_row() && index_block_info.get_max_merged_trans_version() <= access_ctx_->trans_version_range_.base_version_;
}
private: private:
ObMicroBlockDataHandle &get_read_handle(const int64_t level) ObMicroBlockDataHandle &get_read_handle(const int64_t level)
{ {

View File

@ -1154,8 +1154,6 @@ void ObMultiVersionMicroBlockRowScanner::reuse()
finish_scanning_cur_rowkey_ = true; finish_scanning_cur_rowkey_ = true;
is_last_multi_version_row_ = true; is_last_multi_version_row_ = true;
read_row_direct_flag_ = false; read_row_direct_flag_ = false;
ignore_shadow_row_ = false;
use_pre_micro_row_ = false;
} }
void ObMultiVersionMicroBlockRowScanner::inner_reset() void ObMultiVersionMicroBlockRowScanner::inner_reset()
@ -1244,7 +1242,6 @@ int ObMultiVersionMicroBlockRowScanner::open(
} else if (OB_FAIL(set_base_scan_param(is_left_border, is_right_border))) { } else if (OB_FAIL(set_base_scan_param(is_left_border, is_right_border))) {
LOG_WARN("failed to set base scan param", K(ret), K(is_left_border), K(is_right_border)); LOG_WARN("failed to set base scan param", K(ret), K(is_left_border), K(is_right_border));
} else { } else {
use_pre_micro_row_ = false;
int64_t column_number = block_data.get_micro_header()->column_count_; int64_t column_number = block_data.get_micro_header()->column_count_;
int64_t max_col_count = MAX(read_info_->get_request_count(), column_number); int64_t max_col_count = MAX(read_info_->get_request_count(), column_number);
if (OB_FAIL(tmp_row_.reserve(max_col_count))) { if (OB_FAIL(tmp_row_.reserve(max_col_count))) {
@ -1252,23 +1249,6 @@ int ObMultiVersionMicroBlockRowScanner::open(
} }
} }
if (OB_SUCC(ret) && ObIMicroBlockReaderInfo::INVALID_ROW_INDEX != current_) {
if (OB_UNLIKELY(!reverse_scan_ && !is_last_multi_version_row_)) {
const ObRowHeader *row_header = nullptr;
if (OB_FAIL(reader_->get_row_header(current_, row_header))) {
LOG_WARN("failed to get row header", K(ret), K(current_), K_(macro_id));
} else {
ObMultiVersionRowFlag row_flag;
row_flag.flag_ = row_header->get_mvcc_row_flag();
if (row_flag.is_first_multi_version_row()) {
use_pre_micro_row_ = !finish_scanning_cur_rowkey_;
finish_scanning_cur_rowkey_ = true;
is_last_multi_version_row_ = true;
}
}
}
}
if (OB_SUCC(ret)) { if (OB_SUCC(ret)) {
if (reverse_scan_) { if (reverse_scan_) {
reserved_pos_ = current_; reserved_pos_ = current_;
@ -1303,10 +1283,7 @@ int ObMultiVersionMicroBlockRowScanner::inner_get_next_row(const ObDatumRow *&ro
{ {
int ret = OB_SUCCESS; int ret = OB_SUCCESS;
// TODO(yuanzhe) refactor blockscan opt of multi version sstable // TODO(yuanzhe) refactor blockscan opt of multi version sstable
if (OB_UNLIKELY(use_pre_micro_row_)) { if (can_ignore_multi_version_) {
row = &prev_micro_row_;
use_pre_micro_row_ = false;
} else if (can_ignore_multi_version_) {
if (OB_FAIL(ObIMicroBlockRowScanner::inner_get_next_row(row))) { if (OB_FAIL(ObIMicroBlockRowScanner::inner_get_next_row(row))) {
if (OB_UNLIKELY(OB_ITER_END != ret)) { if (OB_UNLIKELY(OB_ITER_END != ret)) {
LOG_WARN("Failed to inner get next row", K(ret), K_(start), K_(last), K_(current)); LOG_WARN("Failed to inner get next row", K(ret), K_(start), K_(last), K_(current));
@ -1377,17 +1354,6 @@ int ObMultiVersionMicroBlockRowScanner::inner_get_next_row_impl(const ObDatumRow
} }
} }
if (OB_SUCC(ret) && version_fit && ignore_shadow_row_) {
if (OB_ISNULL(multi_version_row)) {
ret = OB_ERR_UNEXPECTED;
STORAGE_LOG(WARN, "unexpected null multi_version_row", K(ret), K(read_row_direct_flag_));
} else if (multi_version_row->is_shadow_row()) {
if (multi_version_row == &row_) { //ptr equal only when the previous row_ is empty, reset the row to be empty for skip shadow row
row_.row_flag_.set_flag(ObDmlFlag::DF_NOT_EXIST);
}
continue;
}
}
if (OB_SUCC(ret)) { if (OB_SUCC(ret)) {
if (!version_fit) { if (!version_fit) {
// do nothing // do nothing
@ -1518,16 +1484,10 @@ int ObMultiVersionMicroBlockRowScanner::locate_cursor_to_read(bool &found_first_
} else { } else {
row_flag.flag_ = row_header->get_mvcc_row_flag(); row_flag.flag_ = row_header->get_mvcc_row_flag();
if (row_flag.is_last_multi_version_row()) { if (row_flag.is_last_multi_version_row()) {
finish_scanning_cur_rowkey_ = false;
found_first_row = true;
reserved_pos_ = current_; reserved_pos_ = current_;
current_ = current_ + 1; current_ = current_ + 1;
if (!reverse_scan_ && OB_FAIL(end_of_block())) {
if (OB_UNLIKELY(OB_ITER_END != ret)) {
LOG_WARN("failed to judge end of block or not", K(ret), K_(macro_id));
}
} else {
finish_scanning_cur_rowkey_ = false;
found_first_row = true;
}
break; break;
} else { } else {
current_ = reverse_scan_ ? current_ - 1 : current_ + 1; current_ = reverse_scan_ ? current_ - 1 : current_ + 1;

View File

@ -276,9 +276,7 @@ public:
trans_version_col_idx_(-1), trans_version_col_idx_(-1),
sql_sequence_col_idx_(-1), sql_sequence_col_idx_(-1),
cell_cnt_(0), cell_cnt_(0),
read_row_direct_flag_(false), read_row_direct_flag_(false)
ignore_shadow_row_(false),
use_pre_micro_row_(false)
{} {}
virtual ~ObMultiVersionMicroBlockRowScanner() {} virtual ~ObMultiVersionMicroBlockRowScanner() {}
void reuse() override; void reuse() override;
@ -295,8 +293,7 @@ public:
const ObMicroBlockData &block_data, const ObMicroBlockData &block_data,
const bool is_left_border, const bool is_left_border,
const bool is_right_border) override final; const bool is_right_border) override final;
virtual int set_ignore_shadow_row() override final { ignore_shadow_row_ = true; return OB_SUCCESS; } INHERIT_TO_STRING_KV("ObMultiVersionMicroBlockRowScanner", ObIMicroBlockRowScanner, K_(read_row_direct_flag), K_(version_range), K_(is_last_multi_version_row), K_(finish_scanning_cur_rowkey));
INHERIT_TO_STRING_KV("ObMultiVersionMicroBlockRowScanner", ObIMicroBlockRowScanner, K_(read_row_direct_flag), K_(ignore_shadow_row), K_(version_range), K_(is_last_multi_version_row), K_(finish_scanning_cur_rowkey), K_(use_pre_micro_row));
protected: protected:
virtual int inner_get_next_row(const ObDatumRow *&row) override; virtual int inner_get_next_row(const ObDatumRow *&row) override;
virtual void inner_reset(); virtual void inner_reset();
@ -343,8 +340,6 @@ private:
transaction::ObTransID trans_id_; transaction::ObTransID trans_id_;
common::ObVersionRange version_range_; common::ObVersionRange version_range_;
bool read_row_direct_flag_; bool read_row_direct_flag_;
bool ignore_shadow_row_;
bool use_pre_micro_row_;
}; };
// multi version sstable micro block scanner for minor merge // multi version sstable micro block scanner for minor merge