更新时间: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
- 手动添加示例。
父主题: 慢SQL管控