更新时间:2026-07-28 GMT+08:00
分享

特性概述

功能定义

在505.2以后的版本中支持了trace存储过程正在执行的SQL语句能力,开启功能后,数据库会在存储过程执行期间将执行的每条语句记录下来,方便实时查看存储过程内正在执行的语句。

用户场景

存储过程执行期间,通过pg_stat_activity可以查看该存储过程的执行状态,通过开启trace功能,可以对存储过程执行实时监测,结合语句的执行计划,进一步分析执行慢的原因。

规格约束

  • pl_trace_func_start参数level范围:session、portal、time、threshold(不区分大小写)。
  • pl_trace_func_start参数max_num范围:100~10000。
  • pl_trace_func_start参数threshold仅支持大于等于零的入参,单位为毫秒,threshold参数仅在level为threshold时生效。
  • pl_trace_func_start参数session_id若不存在则会报错。
  • pl_trace_func_start参数session_id的session已被trace并且与调用函数的session相同时则会报warning并将trace参数修改为本次的入参。
  • pl_trace_func_start参数session_id的session已被trace并且与调用函数的session不相同时则会报错。
  • pl_trace_func_end参数session_id若不存在则会报错,若该session未被trace则会报错。
  • pl_trace_func_clean参数session_id若为null则清除所有的trace信息,若trace信息中有该session_id的数据则清除数据,若不存在则报错。
  • pl_trace_func_clean不可清理正在执行trace的session上的数据,若该session正在trace会跳过清理并报warning提示。
  • trace功能即使执行的函数报错,也会记录已经执行过的语句。
  • trace功能支持同时记录最多100个会话的trace信息。
  • trace功能仅支持在线程池模式(enable_thread_pool = on)下使用。
  • trace功能仅在被trace的会话执行过存储过程后才能使用。
  • trace功能不支持匿名块语句、package的实例化语句。
  • trace功能不支持显示嵌套子程序内部语句,但会显示子程序行号和子程序函数名。
  • trace功能不支持dbe_perf模式下的存储过程。

技术架构

GaussDB执行PL/SQL语句的过程可以简单拆解为以下几个过程:函数执行、语句块执行、语句执行。在具体语句的执行逻辑前后添加回调函数,可实现对正在执行语句的监测,并进行语句记录和统计信息收集。

相关文档