[FEAT MERGE] Set different table mode and compaction strategies to optimize buffer table performance.

Co-authored-by: ZenoWang <wzybuaasoft@163.com>
This commit is contained in:
Tsunaou
2024-06-18 02:58:53 +00:00
committed by ob-robot
parent a5f60f4681
commit b29a7dd782
56 changed files with 2108 additions and 675 deletions

View File

@ -26,7 +26,7 @@ namespace oceanbase
namespace storage
{
int64_t ObTxDataTable::UPDATE_CALC_UPPER_INFO_INTERVAL = 0;
int64_t ObTxTable::UPDATE_MIN_START_SCN_INTERVAL = 0;
}
namespace unittest
@ -90,26 +90,26 @@ void ObTestKeepAliveMinStartSCN::loop_check_start_scn(SCN &prev_min_start_scn, S
MTL_SWITCH(RunCtx.tenant_id_)
{
ObLS *ls = get_ls(RunCtx.tenant_id_, ObLSID(1001));
ObTxDataTable *tx_data_table = ls->get_tx_table()->get_tx_data_table();
ObTxTable *tx_table = ls->get_tx_table();
// 每100毫秒循环一次,对应tx loop worker的单次循环interval,循环200次,对应20秒
// 因为tx loop worker会15秒遍历一次上下文,略大于遍历间隔
int retry_times = 200;
while (--retry_times >= 0) {
// 每次循环都更新tx data table中的min_start_scn
tx_data_table->update_calc_upper_info_(SCN::max_scn());
tx_table->update_min_start_scn_info(SCN::max_scn());
// 判断min_start_scn的大小关系,若出错,打印到stdout
if (prev_min_start_scn > tx_data_table->calc_upper_info_.min_start_scn_in_ctx_) {
if (prev_min_start_scn > tx_table->ctx_min_start_scn_info_.min_start_scn_in_ctx_) {
fprintf(stdout,
"Incorrect min_start_scn in tx data table, prev_min_start_scn = %s, current_min_start_scn = %s\n",
to_cstring(prev_min_start_scn),
to_cstring(tx_data_table->calc_upper_info_.min_start_scn_in_ctx_));
to_cstring(tx_table->ctx_min_start_scn_info_.min_start_scn_in_ctx_));
}
ASSERT_LE(prev_min_start_scn, tx_data_table->calc_upper_info_.min_start_scn_in_ctx_);
prev_min_start_scn = tx_data_table->calc_upper_info_.min_start_scn_in_ctx_;
ASSERT_LE(prev_keep_alive_scn, tx_data_table->calc_upper_info_.keep_alive_scn_);
prev_keep_alive_scn = tx_data_table->calc_upper_info_.keep_alive_scn_;
ASSERT_LE(prev_min_start_scn, tx_table->ctx_min_start_scn_info_.min_start_scn_in_ctx_);
prev_min_start_scn = tx_table->ctx_min_start_scn_info_.min_start_scn_in_ctx_;
ASSERT_LE(prev_keep_alive_scn, tx_table->ctx_min_start_scn_info_.keep_alive_scn_);
prev_keep_alive_scn = tx_table->ctx_min_start_scn_info_.keep_alive_scn_;
::usleep(ObTxLoopWorker::LOOP_INTERVAL);
}