更新时间:2026-07-28 GMT+08:00
常见问题
Q: 当遇到执行慢的存储过程,需要怎么分析?
A: 遇到慢存储过程,可以参考下面的流程,分析执行慢的原因:
- 如果该存储过程正在执行,可以通过pg_stat_activity查询存储过程的执行状态;通过pg_stat_activity获取session_id后,还调用trace接口,实时监测执行信息,语句执行计划,进一步分析执行慢的原因;
- 如果该存储过程已经执行完,在不确定调用路径时,可以使用dbe_perf.statement_history,查找执行慢的语句,分析语句执行计划、等待事件,通过debug_query_id相同,parent_unique_sql_id为0的条件,可以找到最外层的调用语句。
Q: 存储过程执行期间,如何结合pg_stat_activity和trace共同分析存储过程的执行情况?
A: 假设某个会话正在执行存储过程跑批业务,出现了执行时间过长且一直没有执行结束的情况,可以参考如下过程进行分析。
- 参考如下语句,查看正在执行存储过程的会话ID;
select sessionid, query from pg_stat_activity where query like '%call%' and sessionid != pg_current_sessid();
- 调用dbe_perf.pl_trace_func_start(sessionid)函数对相应会话进行trace;
- 开始trace就可以通过dbe_perf.pl_get_trace_info函数进行实时的观测,结合语句执行计划分析执行慢的原因。
父主题: 存储过程性能定位方法