使用指导
当前版本支持的慢SQL根因如表1所示。
表 1 慢SQL根因列表
序号 | 根因 | 根因解释 | 补充说明 |
---|
1 | LOCK_CONTENTION | 锁竞争。 | 语句执行期间被锁阻塞,导致单SQL执行较慢。 |
2 | MANY_DEAD_TUPLES | 废弃元组数量较多。 | 表中废弃元组占比超过设定阈值会降低查询效率,导致单SQL执行较慢。 |
3 | HEAVY_SCAN_OPERATOR | 扫描算子代价较大。 | 执行计划中扫描算子代价较大,导致单SQL执行较慢。 |
4 | ABNORMAL_PLAN_TIME | 异常执行计划生成时间。 | SQL生成执行计划时间较长。 |
5 | UNUSED_AND_REDUNDANT_INDEX | 无用/冗余索引。 | 表中存在无用/冗余索引,影响插入更新语句性能。 |
6 | UPDATE_LARGE_DATA | 更新大量元组。 | 批量更新大量元组,导致单SQL语句性能较差。 |
7 | INSERT_LARGE_DATA | 插入大量元组。 | 批量插入大量元组,导致单SQL语句性能较差。 |
8 | DELETE_LARGE_DATA | 删除大量元组。 | 批量删除大量元组,导致单SQL语句性能较差。 |
9 | TOO_MANY_INDEX | 表中存在太多索引。 | 表中存在大量索引,影响插入更新语句性能。 |
10 | DISK_SPILL | 磁盘溢出。 | 由于GUC参数设置不当等原因导致SQL执行期间发生落盘现象。 |
13 | WORKLOAD_CONTENTION | 数据库负载集中。 | 数据库负载集中导致实例整体执行性能较差。 |
14 | CPU_RESOURCE_CONTENTION | 系统CPU负载集中。 | 由于外部进程等其他原因导致CPU资源紧张,实例整体SQL执行性能较差。 |
15 | IO_RESOURCE_CONTENTION | 系统IO资源集中。 | 由于外部进程等其他原因导致IO资源紧张,实例整体SQL执行性能较差。 |
16 | MEMORY_RESOURCE_CONTENTION | 系统内存资源集中。 | 由于外部进程等其他原因导致内存资源紧张,实例整体SQL执行性能较差。 |
17 | ABNORMAL_NETWORK_STATUS | 异常网络状态。 | 网络异常,导致SQL执行性能较差。 |
18 | OS_RESOURCE_CONTENTION | 句柄资源紧张。 | 系统句柄资源紧张影响整体执行性能。 |
19 | WAIT_EVENT | 等待事件。 | SQL执行期间的等待事件影响执行性能。 |
20 | LACK_STATISTIC_INFO | 统计信息缺失。 | 没有及时更新表统计信息,可能导致执行计划不优进而影响SQL执行性能。 |
21 | MISSING_INDEXES | 缺少索引。 | 缺失索引导致单SQL执行性能较差。 |
22 | POOR_JOIN_PERFORMANCE | JOIN代价较大。 | JOIN算子代价较大,影响SQL语句执行性能。 |
23 | COMPLEX_BOOLEAN_EXPRESSIONS | 复杂的布尔表达式。 | 主要针对not in (item1, item2, ...)情况,如果元素数量太多可能会导致执行计划较差,从而影响SQL的性能。 |
24 | STRING_MATCHING | 字符串匹配。 | 由于不恰当使用函数等原因导致索引失效,进而影响SQL性能。 |
25 | COMPLEX_EXECUTION_PLAN | 复杂的执行计划。 | 执行计划较复杂,执行时间较长。 |
26 | CORRELATED_SUBQUERY | 关联子查询。 | 有相关子查询导致执行性能较差。 |
27 | POOR_AGGREGATION_PERFORMANCE | 聚合代价较大。 | 聚合性能较差进而影响SQL执行性能。 |
31 | DATABASE_VIEW | 系统视图。 | 当前不对系统视图相关的慢SQL进行诊断,统一返回此根因。 |
32 | NO_ROOT_CAUSE_FOUND | 没有发现根因。 | 没有发现当前慢SQL的根因。 |
假设用户已经初始化配置文件目录confpath,则可以通过下述命令实现本特性的功能:
仅启动慢SQL诊断功能(慢SQL诊断根因数量由算法运行结果决定,数量不固定),启动命令如下(更多用法参考对service子命令的说明):
gs_dbmind service start -c confpath --only-run slow_query_diagnosis
用户查询慢SQL诊断历史,命令如下:
gs_dbmind component slow_query_diagnosis show -c confpath --instance instance --query SQL --start-time timestamps0 --end-time timestamps1
用户交互式诊断慢SQL,命令如下:
gs_dbmind component slow_query_diagnosis diagnosis -c confpath --database dbname --schema schema_name --query SQL
启用慢SQL诊断后台任务,首先将opengauss-exporter下的pg_sql_statement_history开启,具体步骤如下:
1、停止opengauss-exporter进程;
2、进入dbmind/components/opengauss_exporter/yamls/statements.yml中,将该指标的status设置为enable;
3、重启opengauss-exporter进程;
4、将slow_query_diagnosis加入到配置文件dbmind.conf下TIMED_TASK的task中,任务之间用逗号隔离,同时该任务运行间隔由配置文件dbmind.conf下TIMED_TASK的slow_query_diagnosis_interval控制,默认120秒,该参数支持用户修改;
5、运行 gs_dbmind service reload -c confpath 命令,启动慢SQL诊断后台任务;
用户手动清理历史预测结果,命令如下:
gs_dbmind component slow_query_diagnosis clean -c confpath --retention-days DAYS
停止已启动的服务,命令如下:
gs_dbmind service stop -c confpath
openGauss 2025-06-07 22:42:34