oceanbase qps计算问题

【 使用环境 】生产环境 or 测试环境
【 OB or 其他组件 】
【 使用版本 】
【问题描述】清晰明确描述问题
【复现路径】问题出现前后相关操作
【附件及日志】推荐使用OceanBase敏捷诊断工具obdiag收集诊断信息,详情参见链接(右键跳转查看):

【SOP系列 22 】——故障诊断第一步(自助诊断和诊断信息收集)

【备注】基于 LLM 和开源文档 RAG 的论坛小助手已开放测试,在发帖时输入 [@论坛小助手] 即可召唤小助手,欢迎试用!

qps计算问题:

sum(rate(ob_sysstat{stat_id=“40000”,@LABELS}[@INTERVAL])) by (@GBLABELS) + sum(rate(ob_sysstat{stat_id=“40002”,@LABELS}[@INTERVAL])) by (@GBLABELS) + sum(rate(ob_sysstat{stat_id=“40004”,@LABELS}[@INTERVAL])) by (@GBLABELS) + sum(rate(ob_sysstat{stat_id=“40006”,@LABELS}[@INTERVAL])) by (@GBLABELS) + sum(rate(ob_sysstat{stat_id=“40008”,@LABELS}[@INTERVAL])) by (@GBLABELS) R_FILL_0_ADD sum(rate(ob_sysstat{stat_id=“40018”,@LABELS}[@INTERVAL])) by (@GBLABELS)

最后的R_FILL_0_ADD什么意思,为什么不直接用+

根据您提供的表达式和问题描述,R_FILL_0_ADD 并不是一个标准的 Prometheus 查询语言(PromQL)操作符。通常情况下,Prometheus 使用 + 来进行向量之间的加法操作。然而,R_FILL_0_ADD 可能是在特定上下文中定义的一个自定义操作符或者宏,用于处理某些特殊情况。

解释 R_FILL_0_ADD

  1. 处理空值

    • 在 Prometheus 中,如果两个向量进行加法操作,而其中一个向量在某个标签组合上没有值,那么结果中该标签组合的值也会缺失。
    • R_FILL_0_ADD 可能是为了在这种情况发生时,将缺失的值填充为 0,然后再进行加法操作。
  2. 示例

    • 假设有两个向量 AB,它们的标签组合分别为 {instance="a"}{instance="b"}
    • 如果 A{instance="b"} 上没有值,而 B{instance="a"} 上没有值,那么直接使用 A + B 会导致结果中只有 {instance="a"}{instance="b"} 的交集部分。
    • 使用 R_FILL_0_ADD 可以确保即使某个标签组合在某个向量中缺失,也会被填充为 0,从而保证最终结果中包含所有标签组合。

为什么不用 +

  • 避免数据丢失:直接使用 + 可能会导致某些标签组合的数据丢失,因为 Prometheus 会忽略那些在某个向量中缺失的标签组合。
  • 保持完整性:使用 R_FILL_0_ADD 可以确保最终结果中包含所有标签组合,即使某些组合在某个向量中缺失。

替代方案

如果您没有 R_FILL_0_ADD 这样的自定义操作符,可以使用 Prometheus 的 or 操作符来实现类似的效果。例如:

sum(rate(ob_sysstat{stat_id="40000",@LABELS}[@INTERVAL])) by (@GBLABELS)
+ sum(rate(ob_sysstat{stat_id="40002",@LABELS}[@INTERVAL])) by (@GBLABELS)
+ sum(rate(ob_sysstat{stat_id="40004",@LABELS}[@INTERVAL])) by (@GBLABELS)
+ sum(rate(ob_sysstat{stat_id="40006",@LABELS}[@INTERVAL])) by (@GBLABELS)
+ sum(rate(ob_sysstat{stat_id="40008",@LABELS}[@INTERVAL])) by (@GBLABELS)
+ (sum(rate(ob_sysstat{stat_id="40018",@LABELS}[@INTERVAL])) by (@GBLABELS) or vector(0))

在这个例子中,vector(0) 是一个常量向量,它的值为 0。使用 or 操作符可以确保即使 sum(rate(ob_sysstat{stat_id="40018",@LABELS}[@INTERVAL])) by (@GBLABELS) 在某些标签组合上没有值,这些标签组合也会被填充为 0。

希望这能帮助您理解 R_FILL_0_ADD 的作用以及为什么在某些情况下不直接使用 +。如果有更多问题,请随时提问。

检索到的文档如下:

  1. OBKV-Table 操作类型
  2. OBKV-Table Java 客户端支持的接口
  3. 5000 ~ 5999
  4. 4000 ~ 4499
  5. 日期时间运算符
  6. 比较运算符
  7. 算术运算符
  8. INSERT
1 个赞