[CP] support virtual table and core table gather stats and use stats

This commit is contained in:
wangt1xiuyi
2023-03-03 03:40:59 +00:00
committed by ob-robot
parent d91c405414
commit 170ebd9ba9
18 changed files with 492 additions and 137 deletions

View File

@ -188,24 +188,117 @@ int ObDbmsStatsUtils::check_table_read_write_valid(const uint64_t tenant_id, boo
return ret;
}
bool ObDbmsStatsUtils::is_stat_sys_table(const uint64_t tenant_id, const int64_t table_id)
//now we support user table、sys table and virtual table to gather and use optimizer stats.
int ObDbmsStatsUtils::check_is_stat_table(share::schema::ObSchemaGetterGuard &schema_guard,
const uint64_t tenant_id,
const int64_t table_id,
bool &is_valid)
{
const uint64_t id = table_id;
return (is_sys_table(id) ||
(share::is_oracle_mapping_real_virtual_table(id) &&
(!is_restrict_access_virtual_table(id) || tenant_id == OB_SYS_TENANT_ID))
) &&
!(is_core_table(table_id) ||
ObSysTableChecker::is_sys_table_index_tid(table_id) ||
id == share::OB_ALL_TABLE_STAT_TID ||
id == share::OB_ALL_COLUMN_STAT_TID ||
id == share::OB_ALL_HISTOGRAM_STAT_TID ||
id == share::OB_ALL_DUMMY_TID ||
id == share::OB_ALL_VIRTUAL_AUTO_INCREMENT_REAL_AGENT_ORA_TID ||
id == share::OB_ALL_TABLE_STAT_HISTORY_TID ||
id == share::OB_ALL_COLUMN_STAT_HISTORY_TID ||
id == share::OB_ALL_HISTOGRAM_STAT_HISTORY_TID ||
is_sys_lob_table(id));
bool ret = OB_SUCCESS;
is_valid = false;
const ObTableSchema *table_schema = NULL;
if (is_sys_table(table_id)) {//check sys table
if (OB_FAIL(check_is_sys_table(schema_guard, tenant_id, table_id, is_valid))) {
LOG_WARN("failed to check is sys table", K(ret));
}
} else if (is_virtual_table(table_id)) {//check virtual table
is_valid = !is_no_stat_virtual_table(table_id);
} else if (OB_FAIL(schema_guard.get_table_schema(tenant_id, table_id, table_schema))) {
LOG_WARN("failed to get table schema", K(ret), K(tenant_id), K(table_id));
} else if (OB_ISNULL(table_schema)) {
//do nothing
} else {//check user table
is_valid = table_schema->is_user_table();
}
return ret;
}
int ObDbmsStatsUtils::check_is_sys_table(share::schema::ObSchemaGetterGuard &schema_guard,
const uint64_t tenant_id,
const int64_t table_id,
bool &is_valid)
{
bool ret = OB_SUCCESS;
const ObSimpleTenantSchema *tenant = NULL;
is_valid = false;
if (!is_sys_table(table_id) ||
ObSysTableChecker::is_sys_table_index_tid(table_id) ||
is_sys_lob_table(table_id) ||
table_id == share::OB_ALL_TABLE_STAT_TID ||
table_id == share::OB_ALL_COLUMN_STAT_TID ||
table_id == share::OB_ALL_HISTOGRAM_STAT_TID ||
table_id == share::OB_ALL_TABLE_STAT_HISTORY_TID ||
table_id == share::OB_ALL_COLUMN_STAT_HISTORY_TID ||
table_id == share::OB_ALL_HISTOGRAM_STAT_HISTORY_TID) {
is_valid = false;
} else if (OB_FAIL(schema_guard.get_tenant_info(tenant_id, tenant))) {
LOG_WARN("fail to get tenant info", KR(ret), K(tenant_id));
//now sys table stat only use and gather in normal tenant
} else if (OB_ISNULL(tenant) || !tenant->is_normal()) {
is_valid = false;
} else {
is_valid = true;
}
return ret;
}
//following virtual table access error, we temporarily disable gather table stats.
bool ObDbmsStatsUtils::is_no_stat_virtual_table(const int64_t table_id)
{
return is_virtual_index_table(table_id) ||
table_id == share::OB_TENANT_VIRTUAL_ALL_TABLE_TID ||
table_id == share::OB_TENANT_VIRTUAL_TABLE_COLUMN_TID ||
table_id == share::OB_TENANT_VIRTUAL_SHOW_CREATE_DATABASE_TID ||
table_id == share::OB_TENANT_VIRTUAL_SHOW_CREATE_TABLE_TID ||
table_id == share::OB_TENANT_VIRTUAL_CURRENT_TENANT_TID ||
table_id == share::OB_TENANT_VIRTUAL_SHOW_TABLES_TID ||
table_id == share::OB_TENANT_VIRTUAL_SHOW_CREATE_PROCEDURE_TID ||
table_id == share::OB_ALL_VIRTUAL_PROXY_SCHEMA_TID ||
table_id == share::OB_ALL_VIRTUAL_PROXY_PARTITION_INFO_TID ||
table_id == share::OB_ALL_VIRTUAL_PROXY_PARTITION_TID ||
table_id == share::OB_ALL_VIRTUAL_PROXY_SUB_PARTITION_TID ||
table_id == share::OB_TENANT_VIRTUAL_SHOW_CREATE_TABLEGROUP_TID ||
table_id == share::OB_TENANT_VIRTUAL_OBJECT_DEFINITION_TID ||
table_id == share::OB_TENANT_VIRTUAL_SHOW_CREATE_TRIGGER_TID ||
table_id == share::OB_TENANT_VIRTUAL_ALL_TABLE_AGENT_TID ||
table_id == share::OB_ALL_VIRTUAL_SESSTAT_ORA_TID ||
table_id == share::OB_TENANT_VIRTUAL_SHOW_CREATE_TABLE_ORA_TID ||
table_id == share::OB_TENANT_VIRTUAL_SHOW_CREATE_PROCEDURE_ORA_TID ||
table_id == share::OB_TENANT_VIRTUAL_SHOW_CREATE_TABLEGROUP_ORA_TID ||
table_id == share::OB_TENANT_VIRTUAL_TABLE_COLUMN_ORA_TID ||
table_id == share::OB_TENANT_VIRTUAL_OBJECT_DEFINITION_ORA_TID ||
table_id == share::OB_ALL_VIRTUAL_AUTO_INCREMENT_REAL_AGENT_ORA_TID ||
table_id == share::OB_TENANT_VIRTUAL_SHOW_CREATE_TRIGGER_ORA_TID ||
table_id == share::OB_ALL_VIRTUAL_PROXY_SCHEMA_ORA_TID ||
table_id == share::OB_ALL_VIRTUAL_PROXY_PARTITION_ORA_TID ||
table_id == share::OB_ALL_VIRTUAL_PROXY_PARTITION_INFO_ORA_TID ||
table_id == share::OB_ALL_VIRTUAL_PROXY_SUB_PARTITION_ORA_TID ||
table_id == share::OB_ALL_VIRTUAL_PLAN_STAT_ORA_TID ||
table_id == share::OB_ALL_VIRTUAL_SQL_AUDIT_ORA_TID ||
table_id == share::OB_ALL_VIRTUAL_TRACE_SPAN_INFO_ORA_TID ||
table_id == share::OB_ALL_VIRTUAL_LOCK_WAIT_STAT_ORA_TID ||
table_id == share::OB_ALL_VIRTUAL_TRANS_STAT_ORA_TID;
}
bool ObDbmsStatsUtils::is_virtual_index_table(const int64_t table_id)
{
return table_id == share::OB_ALL_VIRTUAL_PLAN_CACHE_STAT_ALL_VIRTUAL_PLAN_CACHE_STAT_I1_TID ||
table_id == share::OB_ALL_VIRTUAL_SESSION_EVENT_ALL_VIRTUAL_SESSION_EVENT_I1_TID ||
table_id == share::OB_ALL_VIRTUAL_SESSION_WAIT_ALL_VIRTUAL_SESSION_WAIT_I1_TID ||
table_id == share::OB_ALL_VIRTUAL_SESSION_WAIT_HISTORY_ALL_VIRTUAL_SESSION_WAIT_HISTORY_I1_TID ||
table_id == share::OB_ALL_VIRTUAL_SYSTEM_EVENT_ALL_VIRTUAL_SYSTEM_EVENT_I1_TID ||
table_id == share::OB_ALL_VIRTUAL_SESSTAT_ALL_VIRTUAL_SESSTAT_I1_TID ||
table_id == share::OB_ALL_VIRTUAL_SYSSTAT_ALL_VIRTUAL_SYSSTAT_I1_TID ||
table_id == share::OB_ALL_VIRTUAL_SQL_AUDIT_ALL_VIRTUAL_SQL_AUDIT_I1_TID ||
table_id == share::OB_ALL_VIRTUAL_SQL_PLAN_MONITOR_ALL_VIRTUAL_SQL_PLAN_MONITOR_I1_TID ||
table_id == share::OB_ALL_VIRTUAL_SQL_AUDIT_ORA_ALL_VIRTUAL_SQL_AUDIT_I1_TID ||
table_id == share::OB_ALL_VIRTUAL_PLAN_CACHE_STAT_ORA_ALL_VIRTUAL_PLAN_CACHE_STAT_I1_TID ||
table_id == share::OB_ALL_VIRTUAL_SESSION_WAIT_ORA_ALL_VIRTUAL_SESSION_WAIT_I1_TID ||
table_id == share::OB_ALL_VIRTUAL_SESSION_WAIT_HISTORY_ORA_ALL_VIRTUAL_SESSION_WAIT_HISTORY_I1_TID ||
table_id == share::OB_ALL_VIRTUAL_SESSTAT_ORA_ALL_VIRTUAL_SESSTAT_I1_TID ||
table_id == share::OB_ALL_VIRTUAL_SYSSTAT_ORA_ALL_VIRTUAL_SYSSTAT_I1_TID ||
table_id == share::OB_ALL_VIRTUAL_SYSTEM_EVENT_ORA_ALL_VIRTUAL_SYSTEM_EVENT_I1_TID ||
table_id == share::OB_ALL_VIRTUAL_SQL_PLAN_MONITOR_ORA_ALL_VIRTUAL_SQL_PLAN_MONITOR_I1_TID;
}
/**