全链路跟踪
可获得性
本特性自openGauss 7.0.0-RC2 版本开始引入。
特性简介
全链路跟踪能够追踪用户 SQL 请求在数据库全链路过程中,在不同阶段执行的相关信息,并以树状结构展现给用户,帮助开发者回溯执行时间超过阈值的SQL,诊断SQL性能瓶颈。
客户价值
全链路跟踪提供诊断慢SQL所需要的必要信息,用户无需通过复现就能离线诊断特定慢SQL的性能问题,助力用户快速精准地发现组件内部问题,函数接口方便用户统计慢SQL指标。对接第三方平台。
特性描述
在主机中,全链路跟踪提供函数查询接口。复用系统表(statement_history),增加trace全链路信息,用户从接口中能查询到作业的执行计划,在不同阶段执行的相关信息,结合其他已有慢SQL指标字段便捷地找到性能瓶颈点,进而进行分析和优化。
在备机中,复用原慢SQL备机记录方式,增加trace全链路信息,即备机无法往表(statement_history)中写入性能诊断数据,因此备机使用了新的方式来记录数据,并通过函数接口查询,用户在接口中查询到的各类信息,与主机的表(statement_history)完全一致。
特性增强
增加对SQL在不同阶段执行的相关信息增强。
主机:查看当前节点SQL语句执行trace信息
gsql> select statement_trace_decode(trace) from statement_history;;
例如:
openGauss=# select statement_trace_decode(trace) from statement_history;
statement_trace_decode
--------------------------------------------------------------------------------------------------------------------------------
├─Select query 7424 (us) 2025-07-19 14:52:01.863055+08 2025-07-19 14:52:01.870479+08 +
├─ExecutorRun 7188 (us) 2025-07-19 14:52:01.863272+08 2025-07-19 14:52:01.87046+08 +
├─FunctionScan 7169 (us) 2025-07-19 14:52:01.863282+08 2025-07-19 14:52:01.870451+08 +
备机:查看当前节点SQL语句执行trace信息
gsql> select statement_trace_decode(trace) from dbe_perf.standby_statement_history(true);
例如:
openGauss=# select statement_trace_decode(trace) from dbe_perf.standby_statement_history(true);
statement_trace_decode
-------------------------------------------------------------------------------------------------------------------------------
├─Select query 100796 (us) 2025-07-19 15:02:10.007698+08 2025-07-19 15:02:10.108494+08+
├─ExecutorRun 100574 (us) 2025-07-19 15:02:10.007874+08 2025-07-19 15:02:10.108448+08+
├─FunctionScan 100500 (us) 2025-07-19 15:02:10.007883+08 2025-07-19 15:02:10.108383+08+
特性约束
- 目前的SQL跟踪信息,基于正常的执行逻辑。执行失败的SQL,其跟踪信息不具有准确的参考价值。
- 系统表(statement_history)为unlogged表,节点或进程重启,会导致该节点的数据丢失。
- 通过GUC参数设置收集SQL语句的数量,如果超过阈值,新的SQL语句执行信息不会被收集。
- 通过GUC参数设置单条SQL语句收集的全链路详细信息的最大字节数,如果超过阈值,新的全链路详细信息不会被收集;如果阈值过小(存放不了一个span),全链路详细信息不会被收集。
- 通过异步刷新方式刷新用户执行中的SQL信息,所以用户Query执行结束后,存在查询相关视图函数结果短暂时延。
- statement_history表相关函数以及视图、备机dbe_perf.standby_statement_history中的trace字段为二进制格式,使用对应函数pg_catalog.statement_trace_decode(trace)。
- statement_history表查询需要切换至postgres库,其他库中数据为空。
- 备机dbe_perf.standby_statement_history函数查询需要切换至postgres库,其他库中查询会提示不可用。
- statement_history表以及备机dbe_perf.standby_statement_history函数的内容受track_stmt_stat_level控制,默认为'OFF,L0',参数第一部分代表Full SQL,第二部分是慢SQL;对于全链路信息,只有Full SQL大于等于L1级别或慢SQL大于等于才L1级别才会被记录。
依赖关系
无。
意见反馈