diff --git a/storage/tianchi/ha_tse.cc b/storage/tianchi/ha_tse.cc index b8410bd07a2c7e225daceb32a883a1522910749f..0d6861b9148dd8d721a27ab3d0fc9f8a8af285ea 100644 --- a/storage/tianchi/ha_tse.cc +++ b/storage/tianchi/ha_tse.cc @@ -315,7 +315,7 @@ static inline bool is_create_table_check(MYSQL_THD thd) { return false; } -static bool user_var_set(MYSQL_THD thd, string target_str) { +bool user_var_set(MYSQL_THD thd, string target_str) { user_var_entry *var_entry; var_entry = find_or_nullptr(thd->user_vars, target_str); if (var_entry != nullptr && var_entry->ptr() != nullptr) { @@ -372,7 +372,10 @@ bool is_meta_version_initialize() { } return false; } - +//计算申请cbo_stats结构所需内存 +uint64_t calculate_size_of_cbo_stats(TABLE *table){ + return table->s->fields * sizeof(tse_cbo_stats_column_t) + sizeof(tianchi_cbo_stats_t); +} // 是否为--upgrade=FORCE bool is_meta_version_upgrading_force() { bool is_meta_normalization = CHECK_HAS_MEMBER(handlerton, get_metadata_switch); @@ -5225,7 +5228,10 @@ int ha_tse::initialize_cbo_stats() m_share->cbo_stats->tse_cbo_stats_table.columns = (tse_cbo_stats_column_t*)my_malloc(PSI_NOT_INSTRUMENTED, table->s->fields * sizeof(tse_cbo_stats_column_t), MYF(MY_WME)); - + THD* thd = ha_thd(); + if (user_var_set(thd, "ctc_show_alloc_cbo_stats_mem")) { + tse_log_system("[alloc memory]normal table : %s alloc size :%lu", table->alias, calculate_size_of_cbo_stats(table)); + } m_share->cbo_stats->msg_len = table->s->fields * sizeof(tse_cbo_stats_column_t); return CT_SUCCESS; } @@ -5264,7 +5270,10 @@ void ha_tse::free_cbo_stats() if (!m_share || m_share->cbo_stats == nullptr) { return; } - + THD* thd = ha_thd(); + if (user_var_set(thd, "ctc_show_alloc_cbo_stats_mem")) { + tse_log_system("[free memory]normal table : %s alloc size :%lu", table->alias, calculate_size_of_cbo_stats(table)); + } my_free((m_share->cbo_stats->tse_cbo_stats_table.columns)); m_share->cbo_stats->tse_cbo_stats_table.columns = nullptr; my_free((uchar *)(m_share->cbo_stats)); diff --git a/storage/tianchi/ha_tse.h b/storage/tianchi/ha_tse.h index 6e2807a2234fad2dba8aa83edb6fd69cc3f34df6..1093a33db206bbc87086f80b278075111e1bd8c1 100644 --- a/storage/tianchi/ha_tse.h +++ b/storage/tianchi/ha_tse.h @@ -982,6 +982,9 @@ void free_m_cond(tianchi_handler_t m_tch, tse_conds **conds); void tse_set_metadata_switch(); int32_t tse_get_metadata_switch(); bool is_meta_version_initialize(); +uint64_t calculate_size_of_cbo_stats(TABLE *table); +uint64_t calculate_size_of_cbo_part_stats(TABLE *table,uint32_t part_num); +bool user_var_set(MYSQL_THD thd, string target_str); bool is_initialize(); bool is_starting(); diff --git a/storage/tianchi/ha_tsepart.cc b/storage/tianchi/ha_tsepart.cc index fc5d883d6701f22ea829fbb7be3c1abd3a576a20..5e0d15f52866f6b24d1f19af39cfd615c6a3f12a 100644 --- a/storage/tianchi/ha_tsepart.cc +++ b/storage/tianchi/ha_tsepart.cc @@ -83,7 +83,14 @@ static void get_used_partitions(partition_info *part_info, uint32_t **part_ids, *(*part_ids + i) = part_id; } } - +//计算申请cbo_stats结构所需内存 +uint64_t calculate_size_of_cbo_part_stats(TABLE *table,uint32_t part_num){ + uint64_t size_mem = 0; + for (uint i = 0; i < part_num; i++) { + size_mem += table->s->fields * sizeof(tse_cbo_stats_column_t); + } + return sizeof(tianchi_cbo_stats_t) + part_num * sizeof(tse_cbo_stats_table_t) + size_mem ; +} ha_tsepart::ha_tsepart(handlerton *hton, TABLE_SHARE *table_arg) : ha_tse(hton, table_arg), Partition_helper(this), m_bulk_insert_parts(nullptr), m_part_share(nullptr) { @@ -960,7 +967,7 @@ int ha_tsepart::initialize_cbo_stats() { } uint32_t part_num = m_is_sub_partitioned ? table->part_info->num_parts * table->part_info->num_subparts : table->part_info->num_parts; - + m_part_share->cbo_stats = (tianchi_cbo_stats_t*)my_malloc(PSI_NOT_INSTRUMENTED, sizeof(tianchi_cbo_stats_t), MYF(MY_WME)); if (m_part_share->cbo_stats == nullptr) { tse_log_error("alloc shm mem failed, m_part_share->cbo_stats size(%lu)", sizeof(tianchi_cbo_stats_t)); @@ -978,6 +985,10 @@ int ha_tsepart::initialize_cbo_stats() { (tse_cbo_stats_column_t*)my_malloc(PSI_NOT_INSTRUMENTED, table->s->fields * sizeof(tse_cbo_stats_column_t), MYF(MY_WME)); } m_part_share->cbo_stats->msg_len = table->s->fields * sizeof(tse_cbo_stats_column_t); + THD* thd = ha_thd(); + if (user_var_set(thd, "ctc_show_alloc_cbo_stats_mem")) { + tse_log_system("[alloc memory]part table first_partid: %s alloc size :%lu", table->alias, calculate_size_of_cbo_part_stats(table,part_num)); + } return CT_SUCCESS; } @@ -1031,7 +1042,12 @@ void ha_tsepart::free_cbo_stats() { if (m_part_share->cbo_stats == nullptr) { return; } - + uint32_t part_num = m_is_sub_partitioned ? table->part_info->num_parts * table->part_info->num_subparts : + table->part_info->num_parts; + THD* thd = ha_thd(); + if(user_var_set(thd, "ctc_show_alloc_cbo_stats_mem")){ + tse_log_system("[free memory]normal table : %s alloc size :%lu", table->alias, calculate_size_of_cbo_part_stats(table,part_num)); + } my_free(m_part_share->cbo_stats->tse_cbo_stats_part_table[0].columns); m_part_share->cbo_stats->tse_cbo_stats_part_table[0].columns = nullptr; my_free(m_part_share->cbo_stats->tse_cbo_stats_part_table);