[CP] support virtual table and core table gather stats and use stats
This commit is contained in:
		| @ -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; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	 wangt1xiuyi
					wangt1xiuyi