perf opt for get tenant config 'enable_enhanced_cursor_fetch'
This commit is contained in:
parent
e4d89de5a7
commit
71793a2f8f
@ -8966,24 +8966,20 @@ int ObStaticEngineCG::set_other_properties(const ObLogPlan &log_plan, ObPhysical
|
||||
|
||||
// remember DML's table id set for cursor validation
|
||||
// for more details refer to `phy_plan.dml_table_ids_`
|
||||
if (OB_SUCC(ret) && log_plan.get_stmt()->is_dml_write_stmt()) {
|
||||
const int64_t tenant_id = my_session->get_effective_tenant_id();
|
||||
omt::ObTenantConfigGuard tenant_config(TENANT_CONF(tenant_id));
|
||||
if (tenant_config.is_valid() && tenant_config->_enable_enhanced_cursor_validation) {
|
||||
const ObDelUpdStmt *dml_stmt = static_cast<const ObDelUpdStmt*>(log_plan.get_stmt());
|
||||
ObSEArray<const ObDmlTableInfo*, 1> table_infos;
|
||||
if (OB_FAIL(dml_stmt->get_dml_table_infos(table_infos))) {
|
||||
LOG_WARN("get dml table infos failed", K(ret));
|
||||
} else {
|
||||
phy_plan.get_dml_table_ids().set_capacity(table_infos.count());
|
||||
ARRAY_FOREACH(table_infos, i) {
|
||||
if (OB_FAIL(phy_plan.get_dml_table_ids().push_back(table_infos[i]->ref_table_id_))) {
|
||||
LOG_WARN("push dml table id failed", K(ret));
|
||||
}
|
||||
if (OB_SUCC(ret) && log_plan.get_stmt()->is_dml_write_stmt() && my_session->enable_enhanced_cursor_validation()) {
|
||||
const ObDelUpdStmt *dml_stmt = static_cast<const ObDelUpdStmt*>(log_plan.get_stmt());
|
||||
ObSEArray<const ObDmlTableInfo*, 1> table_infos;
|
||||
if (OB_FAIL(dml_stmt->get_dml_table_infos(table_infos))) {
|
||||
LOG_WARN("get dml table infos failed", K(ret));
|
||||
} else {
|
||||
phy_plan.get_dml_table_ids().set_capacity(table_infos.count());
|
||||
ARRAY_FOREACH(table_infos, i) {
|
||||
if (OB_FAIL(phy_plan.get_dml_table_ids().push_back(table_infos[i]->ref_table_id_))) {
|
||||
LOG_WARN("push dml table id failed", K(ret));
|
||||
}
|
||||
}
|
||||
LOG_TRACE("record dml table ids for cursor validation", K(phy_plan.get_dml_table_ids()));
|
||||
}
|
||||
LOG_TRACE("record dml table ids for cursor validation", K(phy_plan.get_dml_table_ids()));
|
||||
}
|
||||
|
||||
if (OB_SUCC(ret)) {
|
||||
|
@ -8928,9 +8928,7 @@ int ObSPIService::setup_cursor_snapshot_verify_(ObPLCursorInfo *cursor, ObSPIRes
|
||||
}
|
||||
need_register_snapshot = true;
|
||||
} else if (cursor->is_streaming() && tx && tx->is_in_tx()) {
|
||||
const int64_t tenant_id = exec_ctx.get_my_session()->get_effective_tenant_id();
|
||||
omt::ObTenantConfigGuard tenant_config(TENANT_CONF(tenant_id));
|
||||
if (tenant_config.is_valid() && tenant_config->_enable_enhanced_cursor_validation) {
|
||||
if (exec_ctx.get_my_session()->enable_enhanced_cursor_validation()) {
|
||||
need_register_snapshot = false;
|
||||
LOG_TRACE("enable cursor open check read uncommitted");
|
||||
const DependenyTableStore &tables = spi_result->get_result_set()->get_physical_plan()->get_dependency_table();
|
||||
|
@ -1260,12 +1260,8 @@ int ObSqlTransControl::end_stmt(ObExecContext &exec_ctx, const bool rollback, co
|
||||
OX (ObTransDeadlockDetectorAdapter::maintain_deadlock_info_when_end_stmt(exec_ctx, rollback));
|
||||
|
||||
// if stmt is dml, record its table_id set, used by cursor verify snapshot
|
||||
if (OB_SUCC(ret) && !rollback && plan->is_dml_write_stmt()) {
|
||||
const int64_t tenant_id = session->get_effective_tenant_id();
|
||||
omt::ObTenantConfigGuard tenant_config(TENANT_CONF(tenant_id));
|
||||
if (tenant_config.is_valid() && tenant_config->_enable_enhanced_cursor_validation) {
|
||||
OZ (tx_desc->add_modified_tables(plan->get_dml_table_ids()), plan->get_dml_table_ids());
|
||||
}
|
||||
if (OB_SUCC(ret) && !rollback && plan->is_dml_write_stmt() && session->enable_enhanced_cursor_validation()) {
|
||||
OZ (tx_desc->add_modified_tables(plan->get_dml_table_ids()), plan->get_dml_table_ids());
|
||||
}
|
||||
ObTxExecResult &tx_result = session->get_trans_result();
|
||||
if (OB_E(EventTable::EN_TX_RESULT_INCOMPLETE, session->get_sessid()) tx_result.is_incomplete()) {
|
||||
|
@ -3029,6 +3029,8 @@ void ObSQLSessionInfo::ObCachedTenantConfigInfo::refresh()
|
||||
tenant_config->sql_plan_management_mode.get_value_string());
|
||||
// 7. print_sample_ppm_ for flt
|
||||
ATOMIC_STORE(&print_sample_ppm_, tenant_config->_print_sample_ppm);
|
||||
// 8. _enable_enhanced_cursor_validation
|
||||
ATOMIC_STORE(&enable_enhanced_cursor_validation_, tenant_config->_enable_enhanced_cursor_validation);
|
||||
}
|
||||
ATOMIC_STORE(&last_check_ec_ts_, cur_ts);
|
||||
session_->update_tenant_config_version(
|
||||
|
@ -726,6 +726,7 @@ public:
|
||||
print_sample_ppm_(0),
|
||||
last_check_ec_ts_(0),
|
||||
sql_plan_management_mode_(0),
|
||||
enable_enhanced_cursor_validation_(false),
|
||||
session_(session)
|
||||
{
|
||||
}
|
||||
@ -751,6 +752,7 @@ public:
|
||||
bool get_enable_column_store() const { return enable_column_store_; }
|
||||
bool get_enable_decimal_int_type() const { return enable_decimal_int_type_; }
|
||||
int64_t get_sql_plan_management_mode() const { return sql_plan_management_mode_; }
|
||||
bool enable_enhanced_cursor_validation() const { return enable_enhanced_cursor_validation_; }
|
||||
private:
|
||||
//租户级别配置项缓存session 上,避免每次获取都需要刷新
|
||||
bool is_external_consistent_;
|
||||
@ -776,6 +778,7 @@ public:
|
||||
int64_t print_sample_ppm_;
|
||||
int64_t last_check_ec_ts_;
|
||||
int64_t sql_plan_management_mode_;
|
||||
bool enable_enhanced_cursor_validation_;
|
||||
ObSQLSessionInfo *session_;
|
||||
};
|
||||
|
||||
@ -1439,6 +1442,11 @@ public:
|
||||
cached_tenant_config_info_.refresh();
|
||||
return cached_tenant_config_info_.get_audit_log_query_sql();
|
||||
}
|
||||
bool enable_enhanced_cursor_validation()
|
||||
{
|
||||
cached_tenant_config_info_.refresh();
|
||||
return cached_tenant_config_info_.enable_enhanced_cursor_validation();
|
||||
}
|
||||
int get_tmp_table_size(uint64_t &size);
|
||||
int ps_use_stream_result_set(bool &use_stream);
|
||||
void set_proxy_version(uint64_t v) { proxy_version_ = v; }
|
||||
|
Loading…
x
Reference in New Issue
Block a user