
# 特性概述
#### 功能定义
503.1.SPC1800版本以后，支持存储过程慢SQL相关特性，可以通过DBE_PERF.STATEMENT_HISTORY、DBE_PERF.STATEMENT分析存储过程内执行慢的语句。
#### 用户场景
当出现执行慢的存储过程语句时，如果不确定该语句是被哪个存储过程调用，可以借助慢SQL相关特性查找最外层调用语句、单次执行产生的指标、单条语句累计执行产生的消耗等信息。
#### 规格约束
- 需要设置参数instr_unique_sql_track_type = 'all'，DBE_PERF.STATEMENT_HISTORY、DBE_PERF.STATEMENT记录存储过程内语句。
- 查询DBE_PERF.STATEMENT_HISTORY必须具有SYSADMIN权限或者MONITOR ADMIN权限。只可在系统库中查询到结果，用户库中无法查询。
- DBE_PERF.STATEMENT_HISTORY系统表受track_stmt_stat_level控制，默认为"OFF,L0"，第一部分控制Full SQL，第二部分控制Slow SQL。该表不同列限制不同级别才能记录，部分列不同级别记录信息不同。
- 查询视图DBE_PERF.STATEMENT必须具有SYSADMIN权限或者MONITOR ADMIN权限。CN上可以看到此CN接收到的归一化SQL的全量统计信息（包含DN相关信息）；DN上仅可看到此节点执行的归一化SQL的统计信息。
- 访问WDR快照数据需要SYSADMIN或MONADMIN权限。GUC参数enable_wdr_snapshot值为on，且快照数量大于等于2时才可以生成WDR报告。
- 支持记录的存储过程语句包括：DML语句、动态语句、PERFORM语句、OPEN CURSOR语句和FETCH CURSOR语句，其中OPEN和FETCH语句的QUERY会被转换为游标实际执行的查询语句。
 
#### 技术架构
GAUSSDB 中慢SQL指的是执行时间超过阈值log_min_duration_statement的语句。
存储过程慢SQL的支持分为DBE_PERF.STATEMENT_HISTORY和DBE_PERF.STATEMENT两部分。
- 对DBE_PERF.STATEMENT_HISTORY系统表，语句每次执行会产生记录，根据track_stmt_stat_level参数值以及当前语句是否是慢SQL，决定该记录是否会刷新到DBE_PERF.STATEMENT_HISTORY。
- DBE_PERF.STATEMENT记录归一化信息，底层实现是哈希表，unique_query_id、parent_unique_sql_id、userid、dbid相同的语句会归一到同一条记录。
 
