4

我用一个公式来计算大约。MySQL实例的最大内存消耗(简化并用PromQL编写)读取:

(
    mysql_global_variables_key_buffer_size +
    mysql_global_variables_query_cache_size +
    mysql_global_variables_tmp_table_size +
    mysql_global_variables_innodb_buffer_pool_size +
    mysql_global_variables_innodb_additional_mem_pool_size +
    mysql_global_variables_innodb_log_buffer_size +
    (
        mysql_global_variables_max_connections *
        (
            mysql_global_variables_sort_buffer_size +
            mysql_global_variables_read_buffer_size +
            mysql_global_variables_read_rnd_buffer_size +
            mysql_global_variables_join_buffer_size +
            mysql_global_variables_thread_stack +
            mysql_global_variables_binlog_cache_size
        )
    )
)

不幸的是,该mysql_global_variables_innodb_additional_mem_pool_size指标并不总是存在于每个实例中,如果将其包含在计算中,则会导致“无数据”。

有可以用来解决这个问题的功能absent(v instant-vector),但我不确定如何。

我希望将不存在的指标替换为常数(0在这种情况下)。是否可以?

您能否向我提供一些关于如何处理 PromQL 计算中缺失指标的提示

4

2 回答 2

8
mysql_global_variables_innodb_additional_mem_pool_size or up * 0

https://www.robustperception.io/existential-issues-with-metrics/更详细地研究了这个问题。

于 2017-08-08T08:54:39.113 回答
1

如果我们尝试对两个可能缺失的指标求和,则接受的解决方案将无法正常工作。在我的具体情况下,它是mysql_info_schema_innodb_metrics_transaction_trx_rseg_history_len(来自 mariadb)和mysql_global_status_innodb_history_list_length(来自 mysql)。提供的解决方案为我提供了单个主机的 3 个图表。

我使用了以下解决方法:

(metric1{hostname="h"} or on() vector(0))+(metric2{hostname="h"} or on() vector(0))

取自这里:https ://github.com/grafana/grafana/issues/2393#issuecomment-192522042

于 2021-03-15T11:25:56.070 回答