执行计划绑定方法

article/2025/9/29 5:26:31

执行计划突变属于每个数据库系统不可避免页难以预防的难题,处理执行计划突变带来的性能问题也是每个DBA应该具备的技能。除了开发时针对不同范围的结果集使用不同的sql,DBA可以通过查看索引状态、消除索引碎片、表重新分析,还可以使用执行计划固化来强制sql走正确的执行计划。

固化执行计划的方法包括profile、baseline、ouline的方式,常用的方式baseline、outline,可以使用sqlt工具中包含的sql脚本来绑定(coe_load_sql_profile.sql、coe_xfr_sql_profile.sql、coe_load_sql_baseline.sql)

1、情景1--不跨库绑定profile

同实例不同/相同的sql_id绑定同一个执行计划(plan_hash_value),使用coe_load_sql_profile.sql脚本实现

(1)创建用户、构造表、创建索引、收集统计信息

create user test identified by test;

grant dba to test;

conn test/test

create table test_plan as select * from dba_objects;

create index idx_test_plan on test_plan(object_id);

SQL> select count(*) from test_plan;

COUNT(*)

----------

211843

SQL> update test_plan set object_id=200 where object_id<200000;

210550 rows updated.

SQL> commit;

exec dbms_stats.gather_table_stats('TEST','TEST_PLAN',NO_INVALIDATE=>FALSE);

(2)构造测试sql

sqlplus test/test

set autot traceo

select object_name from test_plan where object_id=200;

执行计划全表扫描---由于object_id=200的记录数210550,总记录数 211843,结果集占据了全表的大多数,优化器评估走全表cost更小

(3)构造另一个sql

sqlplus test/test

select /*+index(test_plan idx_test_plan)*/object_name from test_plan where object_id=200;

注意:构造加hint的sql时,注意不能给表加别名,否则绑定profile的时候会报hint unresolved,导致绑定不起效果,如:

select /*+index(t idx_test_plan)*/object_name from test_plan t where object_id=200;

这种sql针对 select object_name from test_plan where object_id=200;无法绑定

(4)查看sql对应的sql_id和plan_hash_value

a、查看sql_id

select sql_text,sql_id from v$sql where sql_text like '%object_name%object_id=200%';

select object_name from test_plan where object_id=200

1g9qpbgxysw2n

select /*+index(test_plan idx_test_plan)*/object_name from test_plan where object_id=200

1dm5zr08f8q42

b、查看plan_hash_value

SELECT PLAN_HASH_VALUE, version_count , substr(sql_text,1,40) "SQL" FROM v$sqlarea WHERE SQL_ID='1g9qpbgxysw2n';

289916773 1 select object_name from test_plan where

SELECT PLAN_HASH_VALUE, version_count , substr(sql_text,1,40) "SQL" FROM v$sqlarea WHERE SQL_ID='1dm5zr08f8q42';

568013966 1 select /*+index(test_plan idx_test_plan)

c、查看sql_id的执行计划:

set lines 400 pages 9999 long 9999

select plan_table_output from table(dbms_xplan.display_cursor('1g9qpbgxysw2n',null,'ADVANCED'));

select plan_table_output from table(dbms_xplan.display_cursor('1dm5zr08f8q42',null,'ADVANCED'));

d、通过plan_hash_value查看v$sql_plan中对应的执行计划:

insert into plan_table(statement_id,PLAN_ID,timestamp ,REMARKS ,OPERATION ,OPTIONS ,OBJECT_NODE ,OBJECT_OWNER ,OBJECT_NAME ,OBJECT_ALIAS ,OBJECT_INSTANCE ,OBJECT_TYPE ,OPTIMIZER ,SEARCH_COLUMNS ,ID ,PARENT_ID ,DEPTH ,POSITION ,COST ,CARDINALITY ,BYTES ,OTHER_TAG ,PARTITION_START ,PARTITION_STOP ,PARTITION_ID ,OTHER ,OTHER_XML ,DISTRIBUTION ,CPU_COST ,IO_COST ,TEMP_SPACE ,ACCESS_PREDICATES ,FILTER_PREDICATES ,PROJECTION ,TIME ,QBLOCK_NAME ) SELECT 'PLAN_'||PLAN_HASH_VALUE AS statement_id, 0 PLAN_ID,SYSDATE timestamp ,REMARKS ,OPERATION ,OPTIONS ,OBJECT_NODE ,OBJECT_OWNER ,OBJECT_NAME ,OBJECT_ALIAS ,0 OBJECT_INSTANCE ,OBJECT_TYPE ,OPTIMIZER ,SEARCH_COLUMNS ,ID ,PARENT_ID ,DEPTH ,POSITION ,COST ,CARDINALITY ,BYTES ,OTHER_TAG ,PARTITION_START ,PARTITION_STOP ,PARTITION_ID ,OTHER ,OTHER_XML ,DISTRIBUTION ,CPU_COST ,IO_COST ,TEMP_SPACE ,ACCESS_PREDICATES ,FILTER_PREDICATES ,PROJECTION ,TIME ,QBLOCK_NAME FROM v$sql_plan

WHERE PLAN_HASH_VALUE='&plan_hash_value' AND ADDRESS=(SELECT MAX(ADDRESS) FROM V$SQL_PLAN WHERE PLAN_HASH_VALUE='&plan_hash_value');

SELECT * FROM TABLE(dbms_xplan.display('plan_table', 'PLAN_'||'&plan_hash_value'));

(5)使用profile进行执行计划绑定

@coe_load_sql_profile.sql 待优化的sql_id 正确执行计划sql_id 正确执行计划的plan_hash_value

sqlplus test/test @coe_load_sql_profile.sql 1g9qpbgxysw2n 1dm5zr08f8q42 568013966

注意:

  • 此脚本coe_load_sql_profile.sql只能使用普通用户执行,sys用户执行会报错

ORA-19381: cannot create staging table in SYS schema

  • 如果同一个sql(即sql_id只有一个)有不同的执行计划(plan_hash_value),想对此sql绑定其中一个执行计划,也可以使用coe_xfr_sql_profile.sql

如:

@coe_xfr_sql_profile.sql 待优化的sql_id 待优化的sql_id 正确执行计划的plan_hash_value

sqlplus test/test @coe_load_sql_profile.sql 1g9qpbgxysw2n 1g9qpbgxysw2n 568013966

(6)查看profile绑定效果

select name,SQL_TEXT,STATUS from dba_sql_profiles;

profile已创建,绿框的568013966是绑定的plan_hash_value,查看远sql的执行计划,发现profile已生效,执行计划由原来的全表走了索引

2、情景2--跨库绑定profile

如果某个库中的某sql执行计划不对,另一个类似的库的同一个sql执行计划正常,需要从正常库中导出正确的执行计划,绑定到问题库。(不同库不同用户sql完全相同,sql_id也会一样,可以使用此方法)

由于coe_load_sql_profile.sql会直接绑定,可能会对正常库有些影响,且比较麻烦,需要将dmp文件导入问题库,然后使用DBMS_SQLTUNE.UNPACK_STGTAB_SQLPROF

针对这种情况,可以使用coe_xfr_sql_profile.sql脚本,不会对正常库产生修改,只生成绑定脚本,然后在问题库执行即可(比如印尼shard1,shard2,shard3,业务都是用app_schema用户,且业务sql在3个库里一样)

(1)创建用户、构造表、创建索引、收集统计信息

create user test identified by test;

grant dba to test;

conn test/test

create table test_plan as select * from dba_objects;

create index idx_test_plan on test_plan(object_id);

SQL> select count(*) from test_plan;

COUNT(*)

----------

84145

SQL> update test_plan set object_id=200 where object_id<80000;

72361 rows updated.

SQL> commit;

exec dbms_stats.gather_table_stats('TEST','TEST_PLAN',NO_INVALIDATE=>FALSE);

(2)构造测试sql

sqlplus test/test

set autot traceo

select object_name from test_plan where object_id=200;

执行计划全表扫描

(3)查看sql对应的sql_id和plan_hash_value

a、查看sql_id

select sql_text,sql_id from v$sql where sql_text like '%object_name%object_id=200%';

select object_name from test_plan where object_id=200

1g9qpbgxysw2n

b、查看plan_hash_value

SELECT PLAN_HASH_VALUE, version_count , substr(sql_text,1,40) "SQL" FROM v$sqlarea WHERE SQL_ID='1g9qpbgxysw2n';

289916773 1 select object_name from test_plan where

c、查看sql_id的执行计划:

set lines 400 pages 9999 long 9999

select plan_table_output from table(dbms_xplan.display_cursor('1g9qpbgxysw2n',null,'ADVANCED'));

(4)使用coe_xfr_sql_profile.sql生成正确的执行计划脚本

在执行计划正确的库中执行:

@coe_xfr_sql_profile.sql 正确执行计划sql_id 正确执行计划的plan_hash_value

sqlplus test/test @coe_xfr_sql_profile.sql 1g9qpbgxysw2n 568013966

此脚本coe_xfr_sql_profile.sql不会真正生成profile,需要手动执行生成的coe_xfr_sql_profile_1g9qpbgxysw2n_568013966.sql来生成profile绑定执行计划,将生成的脚本传到问题库并执行:

sqlplus test/test @coe_xfr_sql_profile_1g9qpbgxysw2n_568013966.sql

(6)问题库查看profile绑定效果

select name,SQL_TEXT,STATUS from dba_sql_profiles;

profile已创建,绿框的是绑定的sql_id和plan_hash_value,查看远sql的执行计划,发现profile已生效,执行计划由原来的全表走了索引

3、情景3--使用baseline绑定执行计划

(1)创建用户、构造表、创建索引、收集统计信息

create user test identified by test;

grant dba to test;

conn test/test

create table test_plan as select * from dba_objects;

create index idx_test_plan on test_plan(object_id);

SQL> select count(*) from test_plan;

COUNT(*)

----------

211843

SQL> update test_plan set object_id=200 where object_id<200000;

210550 rows updated.

SQL> commit;

exec dbms_stats.gather_table_stats('TEST','TEST_PLAN',NO_INVALIDATE=>FALSE);

(2)构造测试sql

sqlplus test/test

set autot traceo

select object_name from test_plan where object_id=200;

执行计划全表扫描---由于object_id=200的记录数210550,总记录数 211843,结果集占据了全表的大多数,优化器评估走全表cost更小

(3)构造另一个sql

sqlplus test/test

select /*+index(test_plan idx_test_plan)*/object_name from test_plan where object_id=200;

注意:构造加hint的sql时,注意不能给表加别名,否则绑定baseline的时候会报failed to use sql plan baseline for this statement,导致绑定不起效果,如:

select /*+index(t idx_test_plan)*/object_name from test_plan t where object_id=200;

这种sql针对 select object_name from test_plan where object_id=200;无法绑定

(4)查看sql对应的sql_id和plan_hash_value

a、查看sql_id

select sql_text,sql_id from v$sql where sql_text like '%object_name%object_id=200%';

select object_name from test_plan where object_id=200

1g9qpbgxysw2n

select /*+index(test_plan idx_test_plan)*/object_name from test_plan where object_id=200

1dm5zr08f8q42

b、查看plan_hash_value

SELECT PLAN_HASH_VALUE, version_count , substr(sql_text,1,40) "SQL" FROM v$sqlarea WHERE SQL_ID='1g9qpbgxysw2n';

289916773 1 select object_name from test_plan where

SELECT PLAN_HASH_VALUE, version_count , substr(sql_text,1,40) "SQL" FROM v$sqlarea WHERE SQL_ID='1dm5zr08f8q42';

568013966 1 select /*+index(test_plan idx_test_plan)

c、查看sql_id的执行计划:

set lines 400 pages 9999 long 9999

select plan_table_output from table(dbms_xplan.display_cursor('1g9qpbgxysw2n',null,'ADVANCED'));

select plan_table_output from table(dbms_xplan.display_cursor('1dm5zr08f8q42',null,'ADVANCED'));

d、通过plan_hash_value查看v$sql_plan中对应的执行计划:

insert into plan_table(statement_id,PLAN_ID,timestamp ,REMARKS ,OPERATION ,OPTIONS ,OBJECT_NODE ,OBJECT_OWNER ,OBJECT_NAME ,OBJECT_ALIAS ,OBJECT_INSTANCE ,OBJECT_TYPE ,OPTIMIZER ,SEARCH_COLUMNS ,ID ,PARENT_ID ,DEPTH ,POSITION ,COST ,CARDINALITY ,BYTES ,OTHER_TAG ,PARTITION_START ,PARTITION_STOP ,PARTITION_ID ,OTHER ,OTHER_XML ,DISTRIBUTION ,CPU_COST ,IO_COST ,TEMP_SPACE ,ACCESS_PREDICATES ,FILTER_PREDICATES ,PROJECTION ,TIME ,QBLOCK_NAME ) SELECT 'PLAN_'||PLAN_HASH_VALUE AS statement_id, 0 PLAN_ID,SYSDATE timestamp ,REMARKS ,OPERATION ,OPTIONS ,OBJECT_NODE ,OBJECT_OWNER ,OBJECT_NAME ,OBJECT_ALIAS ,0 OBJECT_INSTANCE ,OBJECT_TYPE ,OPTIMIZER ,SEARCH_COLUMNS ,ID ,PARENT_ID ,DEPTH ,POSITION ,COST ,CARDINALITY ,BYTES ,OTHER_TAG ,PARTITION_START ,PARTITION_STOP ,PARTITION_ID ,OTHER ,OTHER_XML ,DISTRIBUTION ,CPU_COST ,IO_COST ,TEMP_SPACE ,ACCESS_PREDICATES ,FILTER_PREDICATES ,PROJECTION ,TIME ,QBLOCK_NAME FROM v$sql_plan

WHERE PLAN_HASH_VALUE='&plan_hash_value' AND ADDRESS=(SELECT MAX(ADDRESS) FROM V$SQL_PLAN WHERE PLAN_HASH_VALUE='&plan_hash_value');

SELECT * FROM TABLE(dbms_xplan.display('plan_table', 'PLAN_'||'&plan_hash_value'));

(5)使用baseline进行执行计划绑定

@coe_load_sql_baseline.sql 待优化的sql_id 正确执行计划sql_id 正确执行计划的plan_hash_value

sqlplus test/test @coe_load_sql_baseline.sql 1g9qpbgxysw2n 1dm5zr08f8q42 568013966

注意:

  • ORA-01403: no data found错误可以忽略
  • 如果同一个sql(即sql_id只有一个)有不同的执行计划(plan_hash_value),想对此sql绑定其中一个执行计划,也可以使用coe_xfr_sql_profile.sql

如:

@coe_load_sql_baseline.sql 待优化的sql_id 待优化的sql_id 正确执行计划的plan_hash_value

sqlplus test/test @coe_load_sql_baseline.sql 1g9qpbgxysw2n 1g9qpbgxysw2n 568013966

(6)查看baseline绑定效果

set lines 400 pages 9999 long 999

col sql_handle for a30

col plan_name for a50

select sql_handle,plan_name, ENABLED, ACCEPTED, FIXED, EXECUTIONS,sql_text from dba_sql_plan_baselines;

查看原sql的执行计划,发现baseline已生效,执行计划由原来的全表走了索引

执行完此sql会生成一个accepted为no(不会被使用)的plan,如下:

可以使用dbms_xplan.display_sql_plan_baseline查看已有的baseline的执行计划:

select * from table(dbms_xplan.display_sql_plan_baseline(sql_handle=>'SQL_a2fce0f552889dc6',plan_name=>'SQL_PLAN_a5z70yp98j7f623afb57b'));

select * from table(dbms_xplan.display_sql_plan_baseline(sql_handle=>'SQL_a2fce0f552889dc6',plan_name=>'SQL_PLAN_a5z70yp98j7f6cfa72a87'));

一个SQL计划必须同时ENABLED和ACCEPTED为YES,否则CBO将忽略它

(7)观察baseline与profile的异同

使用以下存储过程,可以对同一个sql的多个plan进行比较,比如此场景中,比较SQL_PLAN_a5z70yp98j7f6cfa72a8和已经enable accepted的SQL_PLAN_a5z70yp98j7f623afb57b进行比较

set serveroutput on

set long 10000

declare

result_clob clob;

begin

result_clob:=DBMS_SPM.EVOLVE_SQL_PLAN_BASELINE(sql_handle=>'SQL_a2fce0f552889dc6',plan_name=>'SQL_PLAN_a5z70yp98j7f6cfa72a87',verify=>'YES',commit=>'YES');

dbms_output.put_line(result_clob);

end;

/

比较的结果是此plan并不比baseline绑定的plan好多少,没必要将其accepted改为yes,sql还是使用之前的绑定

总结:

  • 在非跨库的执行计划绑定的情况下,统一使用coe_load_sql_profile.sql或者coe_load_sql_baseline.sql来绑定profile或baseline;
  • 在跨库的执行计划绑定时,只能使用coe_xfr_sql_profile.sql绑定profile

baseline和profile的不同点:

1、profile是10g开始提供的功能,baseline是11g开始提供的功能

2、profile只能固定一个执行计划;baseline可以固定多个执行计划,如某sql有10个执行计划,可以使用baseline固定使用其中的2个,根据11g adaptive plan的特性,让优化器从这2个计划中自动选择,fixed属性为yes的执行计划优先被选择,可以设置多个计划的fixed=yes

3、profile的执行计划可以直接从历史数据(AWR)里面load,baseline需要先把awr的数据load到STS(SQL Tuning Set),才能再load到baseline。所以一般生产系统执行计划突然变差的应急处理,多使用profile

4、profile可以对未使用绑定变量的SQL进行执行计划绑定,如:

select xx from t1 whereid=1;

select xx from t1 whereid=2等,

这样的sql一般只能使用profile绑定,且要使用coe_xfr_sql_profile.sql的方式,选择其中任意一个sql_id,将生成的sql脚本中force_match参数设置为true(默认是false),;

如上面生成的coe_xfr_sql_profile_1g9qpbgxysw2n_568013966.sql,将force_match => TRUE,则其他类似的sql如 select object_name from test_plan where object_id=100;也会走绑定的执行计划

而baseline不可以,如果要绑定,需要逐条sql_id进行绑定;如果将系统参数cursor_sharing改成FORCE,这时可以baseline绑定。

5、profile和baseline之间不是简单的优先级的问题,如果二者不冲突,则是合并使用;如果冲突,而且baseline可以reproduce(10053显示)时,使用baseline,否则使用profile。

6、sql_id不一样会不会有影响?

profile识别的不是sql_id,而是signature,如果几个sql 只是在大小写、空格数、回车数或tab键有区别,那么这些SQL在系统中的signature就是一样的,可以使用同一个profile。

📎coe_load_sql_profile.sql

📎coe_load_sql_baseline.sql

📎coe_xfr_sql_profile.sql


http://chatgpt.dhexx.cn/article/VuYjETAG.shtml

相关文章

PostgreSQL执行计划

简介 PostgreSQL是“世界上最先进的开源关系型数据库”。因为出现较晚&#xff0c;所以客户人群基数较MySQL少&#xff0c;但是发展势头很猛&#xff0c;最大优势是完全开源。 MySQL是“世界上最流行的开源关系型数据库”。当前客户基数大&#xff0c;随着被Oracle收购&#…

一文带你了解SQL的执行计划(explain)

一. 什么是SQL执行计划 为什么关注sql的执行计划&#xff0c;因为一个sql的执行计划可以告诉我们很多关于如何优化sql的信息 。 通过一个sql计划&#xff0c;如何访问中的数据 &#xff08;是使用全表扫描还是索引查找&#xff1f;&#xff09; 一个表中可能存在多个表中不同的…

执行计划

一、什么是执行计划&#xff08;explain plan&#xff09; 执行计划&#xff1a;一条查询语句在ORACLE中的执行过程或访问路径的描述。 二、如何查看执行计划 1: 在PL/SQL下按F5查看执行计划。第三方工具toad等。 很多人以为PL/SQL的执行计划只能看到基数、优化器、耗费等基本信…

matlab画图基本命令

一、本文主要内容和相关参考博客 参考了xticklabel和xtick在matlab里的区别 和 label ‘ytick’的设置这两个网址。matlab在画图时会自动调整坐标轴间隔的大小&#xff0c;但是我们可以使用如set(gca,ytick,ylabel_pos,yticklabel,ylabel_str)的函数来实现自己调整间隔以画出…

MATLAB常用绘图命令

选择图型窗口命令 坐标轴相关命令 文字标示命令 栅格 离散数据处理

MATLAB画图命令zz

一、散点图 1&#xff0e;1&#xff0e;命令 plot 功能 线性二维图。在线条多于一条时&#xff0c;若用户没有指定使用颜色&#xff0c;则plot循环使用由当前坐标轴颜色顺序属性&#xff08;current axes ColorOrder property&#xff09;定义的颜色&#xff0c;以区别不同的…

slice matlab,Matlab画图之slice命令

满意答案 7a6o8yb4 2015.08.12 采纳率:55% 等级:8 已帮助:212人 close all; clc; clear; A = [1 2 2 25 1 3 3 21 1 4 4 20 2 5 5 19 2 6 7 31]; x = A(:, 1); y = A(:, 2); z = A(:, 3); s = A(:, 4); % 提取有效数据 xb = min(x); xe = max(x); yb = min(y); ye = max(…

Matlab画图命令介绍

这是matlab里最基本的命令&#xff0c;帮助那些没有学过matlab&#xff0c;只是用它来画画图的人。

matlab画图句柄

Hf_1figure(color, white);figure全部属性 Alphamap: [0 0.0159 0.0317 0.0476 0.0635 0.0794 … ]BeingDeleted: offBusyAction: queueButtonDownFcn: Children: [00 GraphicsPlaceholder]Clipping: onCloseRequestFcn: closereqColor: [1 1 1]Colormap: [2563 double]Context…

【转载】Matlab画图命令介绍

这是matlab里最基本的命令&#xff0c;帮助那些没有学过matlab&#xff0c;只是用它来画画图的人。

matlab 画图 浓淡有别,matlab画图命令汇总

matlab画图命令汇总(2010-11-16 21:46:24) 转载 一、plot系列 plot  |  plot3  |  plotyy  |  polar(极坐标) 二、image系列 image  |  imagesc  |  pcolor(伪彩图)  | 三、contour系列——等高线图 contour  |  contour3  |  contourc  |  …

matlab绘图命令

1、fplot() 该命令常用来绘制符号函数的图像&#xff1b;其具体格式为&#xff1a; fplot(fun,lims)&#xff0c;其中fun是符号函数表达式&#xff0c;lims用来声明绘图区间。 例如&#xff1a; 绘制函数&#xff1a;f(x)sinxx; >> lims[-5,5]>> fplot(sin(x)x,lim…

matlab绘图命令总结(重要!!!整理)

基本的绘图流程&#xff1a; &#xff08;1&#xff09;数据准备。 &#xff08;2&#xff09;设置当前绘图区。 &#xff08;3&#xff09;绘图。 &#xff08;4&#xff09;设置图形中曲线和标记点格式。 &#xff08;5&#xff09;设置坐标轴和网格线属性。 &#xff08;6&a…

MATLAB常用画图命令汇总

自己在建模时常用到的绘图命令&#xff0c;总结的时候也实操了一下&#xff0c;发现了很多通往新世界的大门 我不生产文章&#xff0c;我只是帮助中心的搬运工~​ &#xff08;一&#xff09;二维图像 1.散点图 scatter() ​scatter(x,y,sz,c,mkr.filled,) sz&#xff1a;指…

Prometheus完整搭建及实战各种监控

一.Prometheus介绍 Prometheus&#xff08;普罗米修斯&#xff09;是一个最初在SoundCloud上构建的监控系统。自2012年成为社区开源项目&#xff0c;拥有非常活跃的开发人员和用户社区。为强调开源及独立维护&#xff0c;Prometheus于2016年加入云原生云计算基金会&#xff08;…

Prometheus【普罗米修斯】+Grafana部署企业级监控之 promQL语法

一、PromQL介绍 PromQL (Prometheus Query Language) 是 Prometheus 自己开发的数据查询 DSL 语言&#xff0c;语言表现力非常丰富&#xff0c;内置函数很多&#xff0c;在日常数据可视化以及rules 告警中都会使用到它。 1.1 表达式数据类型&#xff1a; 在prometheus的表达…

Granafa监控仪表盘:自定义简约型-只显示资源总览,各个主机详情

目录 前言 Grafana选择监控仪表盘 自定义简约型-只显示资源总览&#xff0c;各个主机详情 监控仪表盘JSON数据 前言 相关参考&#xff1a;Windows监控&#xff1a;基于PrometheusGrafana监控CPU、内存、磁盘、网络、GPU信息 Grafana选择监控仪表盘 访问地址&#xff1a;htt…

翻译:Irate绘图更精准

原文&#xff1a;Irate graphs are better graphs | Robust Perception Prometheus 0.16.1 was just released, and with it brings my addition of the irate function. This offers more responsive graphs and higher resolution dashboards. 刚刚发布的普罗米修斯 0.16.1&a…

prometheus-rate、irate、increase函数使用场景

rate() rate(v range-vector)计算范围向量中时间序列的每秒平均平均增长率。单调性中断&#xff08;例如由于目标重启而导致的计数器重置&#xff09;会自动进行调整。同样&#xff0c;计算会外推到时间范围的末尾&#xff0c;从而允许遗漏刮擦或刮擦周期与该范围的时间段不完…

Prometheus监控 rate与irate的区别

对官网文档的解读irate和rate都会用于计算某个指标在一定时间间隔内的变化速率。但是它们的计算方法有所不同&#xff1a;irate取的是在指定时间范围内的最近两个数据点来算速率&#xff0c;而rate会取指定时间范围内所有数据点&#xff0c;算出一组速率&#xff0c;然后取平均…