
# 常见问题
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: 假设某个会话正在执行存储过程跑批业务，出现了执行时间过长且一直没有执行结束的情况，可以参考如下过程进行分析。
1. 参考如下语句，查看正在执行存储过程的会话ID；
```
select sessionid, query from pg_stat_activity where query like '%call%' and sessionid != pg_current_sessid();
```
2. 调用dbe_perf.pl_trace_func_start(sessionid)函数对相应会话进行trace；
3. 开始trace就可以通过dbe_perf.pl_get_trace_info函数进行实时的观测，结合语句执行计划分析执行慢的原因。
 
