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

操作指导

前提条件

  • 依赖项:无。
  • 权限要求:执行系统函数需要对应的权限,详见技术原理

注意事项

  • 识别异常SQL功能依赖于DBE_PERF.STATEMENT中的SQL信息,若DBE_PERF.STATEMENT的条目数量达到上限(上限由GUC参数instr_unique_sql_count设置),后续未记录于DBE_PERF.STATEMENT的SQL无法被自动识别为异常SQL。
  • 不推荐设置GUC参数abnormal_sql_control_type的可选项sql_abnormal_other,设置后可能对正常SQL语句进行管控(如被查询的表数据量增加,但查询语句对应的unique_sql_id可能未发生变化,此时查询此表的CPU时间增加,有可能被检测为异常SQL)。
  • 当白名单DBE_PERF.ABNORMAL_SQL_ALLOWLIST和管控名单DBE_PERF.ABNORMAL_SQL中存在同一类SQL时,实际以白名单为准,不对此SQL进行管控(可能的场景为先将SQL手动加入DBE_PERF.ABNORMAL_SQL_ALLOWLIST中再将SQL手动加入DBE_PERF.ABNORMAL_SQL)。
  • 如果将某类SQL添加进入DBE_PERF.ABNORMAL_SQL_ALLOWLIST时,此类SQL在DBE_PERF.ABNORMAL_SQL也存在,会将DBE_PERF.ABNORMAL_SQL对应的条目清空。

操作步骤

识别异常SQL功能和管控异常SQL功能均为自动执行,实际需要手动操作的仅有以下两项:

  • 手动添加或删除异常SQL管控名单DBE_PERF.ABNORMAL_SQL中的条目。
    • 手动添加示例。
      gaussdb=# \x                                               // 开启扩展显示,方便查看
      Expanded display is on.
      
      gaussdb=# SELECT unique_sql_id,query FROM DBE_PERF.STATEMENT WHERE query like '%SELECT * FROM t1%';  // 获取测试语句的unique_sql_id
      -[ RECORD 1 ]-+------------------
      unique_sql_id | 2995072629
      query         | select * from t1;
      
      gaussdb=# CALL add_abnormal_sql('2995072629');             // 将对应SQL加入管控名单
      -[ RECORD 1 ]----+-------------
      add_abnormal_sql | ADD succeed.
      
      gaussdb=# SELECT * FROM DBE_PERF.ABNORMAL_SQL;             // 查看管控名单,添加成功
      -[ RECORD 1 ]-----------+------------------------------
      unique_sql_id           | 2995072629                       // 此异常SQL的unique_sql_id
      abnormal_count          | 2147483647                       // GaussDB检测到此异常SQL的总次数(手动添加时值为2147483647)
      control_expiration_time | 2025-09-02 16:38:19.953392+08    // 此异常SQL若被管控,管控结束时间
      current_controllable    | f                                // 此异常SQL是否被管控(t为管控,f为未管控,由AbnormalSqlCpuWorker线程裁决)
      abnormal_type           | SQL_ABNORMAL_MANUAL              // 此异常SQL的类型(SQL_ABNORMAL_MANUAL为手动添加)
    • 手动删除示例。
      • 单条删除。
        gaussdb=# \x                                               // 开启扩展显示,方便查看
        Expanded display is on.
        
        gaussdb=# SELECT * FROM DBE_PERF.ABNORMAL_SQL;             // 查看管控名单,存在多条语句
        -[ RECORD 1 ]-----------+------------------------------
        unique_sql_id           | 1689263352
        abnormal_count          | 2147483647
        control_expiration_time | 2025-09-02 17:10:46.585405+08
        current_controllable    | f
        abnormal_type           | SQL_ABNORMAL_MANUAL
        -[ RECORD 2 ]-----------+------------------------------
        unique_sql_id           | 2995072629
        abnormal_count          | 2147483647
        control_expiration_time | 2025-09-02 17:10:40.209399+08
        current_controllable    | f
        abnormal_type           | SQL_ABNORMAL_MANUAL
        
        gaussdb=# CALL clean_abnormal_sql('BY_ID', '1689263352');  // 删除单条语句
        -[ RECORD 1 ]------+---------------
        clean_abnormal_sql | Clean succeed.
        
        gaussdb=# SELECT * FROM DBE_PERF.ABNORMAL_SQL;             // 删除单条成功
        -[ RECORD 1 ]-----------+------------------------------
        unique_sql_id           | 2995072629
        abnormal_count          | 2147483647
        control_expiration_time | 2025-09-02 17:10:40.209399+08
        current_controllable    | f
        abnormal_type           | SQL_ABNORMAL_MANUAL
      • 全部删除。
        gaussdb=# \x                                               // 开启扩展显示,方便查看
        Expanded display is on.
        
        gaussdb=# SELECT * FROM DBE_PERF.ABNORMAL_SQL;             // 查看管控名单,存在多条语句
        -[ RECORD 1 ]-----------+------------------------------
        unique_sql_id           | 1689263352
        abnormal_count          | 2147483647
        control_expiration_time | 2025-09-02 17:10:46.585405+08
        current_controllable    | f
        abnormal_type           | SQL_ABNORMAL_MANUAL
        -[ RECORD 2 ]-----------+------------------------------
        unique_sql_id           | 2995072629
        abnormal_count          | 2147483647
        control_expiration_time | 2025-09-02 17:10:40.209399+08
        current_controllable    | f
        abnormal_type           | SQL_ABNORMAL_MANUAL
        
        gaussdb=# CALL clean_abnormal_sql('BY_ALL');              // 删除全部语句
        -[ RECORD 1 ]------+---------------
        clean_abnormal_sql | Clean succeed.
        
        gaussdb=# SELECT * FROM DBE_PERF.ABNORMAL_SQL;            // 删除全部成功
        (No rows)

  • 手动添加或删除异常SQL白名单DBE_PERF.ABNORMAL_SQL_ALLOWLIST中的条目。
    • 手动添加示例。
      gaussdb=# \x                                                // 开启扩展显示,方便查看
      Expanded display is on.
      
      gaussdb=# SELECT unique_sql_id, query FROM DBE_PERF.STATEMENT WHERE query like '%SELECT * FROM t1%';  // 获取测试语句的unique_sql_id
      -[ RECORD 1 ]-+------------------
      unique_sql_id | 2995072629
      query         | select * from t1;
      
      gaussdb=# CALL abnormal_sql_manage_allowlist('ADD', '2995072629');  // 添加到管控白名单
      -[ RECORD 1 ]-----------------+-------------
      abnormal_sql_manage_allowlist | ADD succeed.
      
      gaussdb=# SELECT * FROM DBE_PERF.ABNORMAL_SQL_ALLOWLIST;    // 查看管控白名单,添加成功
      -[ RECORD 1 ]-+-----------
      unique_sql_id | 2995072629
    • 手动删除示例。
      gaussdb=# \x                                                // 开启扩展显示,方便查看
      Expanded display is on.
      gaussdb=# SELECT * FROM DBE_PERF.ABNORMAL_SQL_ALLOWLIST;    // 查看管控白名单,存在多条语句
      -[ RECORD 1 ]-+-----------
      unique_sql_id | 1689263352
      -[ RECORD 2 ]-+-----------
      unique_sql_id | 2995072629
      
      gaussdb=# CALL abnormal_sql_manage_allowlist('DELETE', '1689263352'); // 从管控白名单删除
      -[ RECORD 1 ]-----------------+----------------
      abnormal_sql_manage_allowlist | DELETE succeed.
      
      gaussdb=# SELECT * FROM DBE_PERF.ABNORMAL_SQL_ALLOWLIST;    // 查看管控白名单,删除成功
      -[ RECORD 1 ]-+-----------
      unique_sql_id | 2995072629

相关文档