我使用一个公式来计算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计算中缺少指标的提示?
mysql_global_variables_innodb_additional_mem_pool_size or up * 0
https://www.robustperception.io/existential-issues-with-metrics/更详细地研究了这个问题。
接受的解决方案将无法很好地工作,以防我们尝试对两个指标求和,这两个指标都可能丢失。 在我的特定情况下,它是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