From b415391f81faea4214a0e72772bca9f233032609 Mon Sep 17 00:00:00 2001 From: zhangxuan_hw Date: Thu, 14 Mar 2024 19:49:41 +0800 Subject: [PATCH 1/3] =?UTF-8?q?[feature]=20=E6=89=93=E5=8D=B0=E7=94=B3?= =?UTF-8?q?=E8=AF=B7=E9=87=8A=E6=94=BE=E5=86=85=E5=AD=98=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- storage/tianchi/ha_tse.cc | 17 +++++++++++++---- storage/tianchi/ha_tse.h | 3 +++ storage/tianchi/ha_tsepart.cc | 22 ++++++++++++++++++---- 3 files changed, 34 insertions(+), 8 deletions(-) diff --git a/storage/tianchi/ha_tse.cc b/storage/tianchi/ha_tse.cc index b8410bd..0d6861b 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 6e2807a..1093a33 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 fc5d883..665f8e1 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)); @@ -972,12 +979,16 @@ int ha_tsepart::initialize_cbo_stats() { m_part_share->cbo_stats->tse_cbo_stats_part_table = (tse_cbo_stats_table_t*)my_malloc(PSI_NOT_INSTRUMENTED, part_num * sizeof(tse_cbo_stats_table_t), MYF(MY_WME)); - + for (uint i = 0; i < part_num; i++) { m_part_share->cbo_stats->tse_cbo_stats_part_table[i].columns = (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,m_part_share->cbo_stats->part_cnt)); + } return CT_SUCCESS; } @@ -1031,7 +1042,10 @@ void ha_tsepart::free_cbo_stats() { if (m_part_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_part_stats(table,m_part_share->cbo_stats->part_cnt)); + } 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); -- Gitee From 94128c1df5c617c3855f4f9e053d799f35ee5b06 Mon Sep 17 00:00:00 2001 From: zhangxuan_hw Date: Sat, 16 Mar 2024 13:19:37 +0000 Subject: [PATCH 2/3] update storage/tianchi/ha_tsepart.cc. Signed-off-by: zhangxuan_hw --- storage/tianchi/ha_tsepart.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/storage/tianchi/ha_tsepart.cc b/storage/tianchi/ha_tsepart.cc index 665f8e1..c09a31f 100644 --- a/storage/tianchi/ha_tsepart.cc +++ b/storage/tianchi/ha_tsepart.cc @@ -979,7 +979,7 @@ int ha_tsepart::initialize_cbo_stats() { m_part_share->cbo_stats->tse_cbo_stats_part_table = (tse_cbo_stats_table_t*)my_malloc(PSI_NOT_INSTRUMENTED, part_num * sizeof(tse_cbo_stats_table_t), MYF(MY_WME)); - + for (uint i = 0; i < part_num; i++) { m_part_share->cbo_stats->tse_cbo_stats_part_table[i].columns = (tse_cbo_stats_column_t*)my_malloc(PSI_NOT_INSTRUMENTED, table->s->fields * sizeof(tse_cbo_stats_column_t), MYF(MY_WME)); -- Gitee From 3c98ae96bc6bf01a56c601a921c7cff287cbcaa8 Mon Sep 17 00:00:00 2001 From: zhangxuan_hw Date: Sat, 16 Mar 2024 13:38:13 +0000 Subject: [PATCH 3/3] update storage/tianchi/ha_tsepart.cc. Signed-off-by: zhangxuan_hw --- storage/tianchi/ha_tsepart.cc | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/storage/tianchi/ha_tsepart.cc b/storage/tianchi/ha_tsepart.cc index c09a31f..5e0d15f 100644 --- a/storage/tianchi/ha_tsepart.cc +++ b/storage/tianchi/ha_tsepart.cc @@ -987,7 +987,7 @@ int ha_tsepart::initialize_cbo_stats() { 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,m_part_share->cbo_stats->part_cnt)); + 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; } @@ -1042,9 +1042,11 @@ 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,m_part_share->cbo_stats->part_cnt)); + 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; -- Gitee