GaussDB的SQL自诊断介绍


风晓
风晓 2024-01-15 08:58:54 52152 赞同 0 反对 0
分类: 资源 标签: 国产数据库
GaussDB的SQL自诊断介绍

用户在执行查询或者执行INSERT/DELETE/UPDATE/CREATE TABLE AS语句时,可能会遇到性能问题。这种情况下,通过查询GS_WLM_SESSION_STATISTICS,GS_WLM_SESSION_HISTORY,GS_WLM_SESSION_QUERY_INFO_ALL视图的warning字段可以获得对应查询可能导致性能问题的告警信息,为性能调优提供参考。

告警场景

目前支持对以下7种导致性能问题的场景上报告警。

1.多列/单列统计信息未收集

如果存在单列或者多列统计信息未收集,则上报相关告警。

需要特别注意的是,对于基于OBS外表的查询,如果未收集统计信息也会上报统计信息未收集的告警,但是由于OBS外表的analyze的性能比较差,因此,需要用户对这种场景下告警是否通过analyze收集统计信息,以获取更优的性能,和查询本身的复杂度做权衡。

告警信息示例:

整表的统计信息未收集:
  •  
Statistic Not Collect:     schema_test.t1
单列统计信息未收集:
  •  
  •  
Statistic Not Collect: schema_test.t2(c1,c2)
多列统计信息未收集:
  •  
Statistic Not Collect: schema_test.t3((c1,c2))
单列和多列统计信息未收集:
  •  
  •  
Statistic Not Collect: schema_test.t4(c1,c2) schema_test.t4((c1,c2))

2.SQL不下推

对于不下推的SQL,尽可能详细上报导致不下推的原因。

    • 对于函数导致的不下推,告警导致不下推的函数名信息;

    • 对于不支持下推的语法,会告警对应语法不支持下推,例如:含有With Recursive,Distinct On,row表达式,返回值为record类型的,会告警相应语法不支持下推等等。

告警信息示例:

  •  
  •  
  •  

SQL is not plan-shipping, reason : "With Recursive" can not be shipped" SQL is not plan-shipping, reason : "Function now() can not be shipped" SQL is not plan-shipping, reason : "Function string_agg() can not be shipped"

3.HashJoin中大表做内表

如果在表连接过程中使用了Hashjoin(可以在GS_WLM_SESSION_HISTORY视图的query_plan字段中查看到),且连接的内表行数是外表行数的10倍或以上;同时内表在每个DN上的平均行数大于10万行,且发生了下盘,则上报相关告警。

告警信息示例:

  •  

PlanNode[7] Large Table is INNER in HashJoin “Vector Hash Aggregate”

4.大表等值连接使用Nestloop

如果在表连接过程中使用了nestloop(可以在GS_WLM_SESSION_HISTORY视图的query_plan字段中查看到),并且两个表中较大表的行数平均每个DN上的行数大于10万行、表的连接中存在等值连接,则上报相关告警。

告警信息示例:

  •  

PlanNode[5] Large Table with Equal-Condition use Nestloop"Nested Loop"

5.大表Broadcast

如果在Broadcast算子中,平均每DN的行数大于10万行,则告警大表broadcast。

告警信息示例:

  •  

PlanNode[5] Large Table in Broadcast "Streaming(type: BROADCAST dop: 1/2)"

6.数据倾斜

某表在各DN上的分布,存在某DN上的行数是另一DN上行数的10倍或以上,且有DN中的行数大于10万行,则上报相关告警。

告警信息示例:

  •  

PlanNode[6] DataSkew:"Seq Scan", min_dn_tuples:0, max_dn_tuples:524288

7.估算不准

如果优化器的估算行数和实际行数中的较大值平均每DN行数大于10万行,并且估算行数和实际行数中较大值是较小值的10倍或以上,则上报相关告警。

告警信息示例:

  •  
PlanNode[5] Inaccurate Estimation-Rows: "Hash Join" A-Rows:0, E-Rows:52488

规格约束

1.告警字符串长度上限为2048。如果告警信息超过这个长度(例如存在大量未收集统计信息的超长表名,列名等信息)则不告警,只上报warning:WARNING, "Planner issue report is truncated, the rest of planner issues will be skipped"
2.如果query存在limit节点(即查询语句中包含limit),则不会上报limit节点以下的Operator级别的告警。

3.对于“数据倾斜”和“估算不准”两种类型告警,在某一个plan树结构下,只上报下层节点的告警,上层节点不再重复告警。这主要是因为这两种类型的告警可能是因为底层触发上层的。例如,如果在scan节点已经存在数据倾斜,那么在上层的hashagg等其他算子很可能也出现数据倾斜。

如果您发现该资源为电子书等存在侵权的资源或对该资源描述不正确等,可点击“私信”按钮向作者进行反馈;如作者无回复可进行平台仲裁,我们会在第一时间进行处理!

评价 0 条
风晓L1
粉丝 1 资源 2038 + 关注 私信
最近热门资源
桌面通用(全架构)【在双系统环境下隐藏Windows启动菜单】操作指南  2049
银河麒麟桌面操作系统V10(SP1)2203-如何进行远程桌面互访?  1990
银河麒麟桌面操作系统【保留数据盘重装系统】  1800
麒麟系统各种原因开不了机解决(合集)  1575
桌面通用(全架构)【rpm包转成deb包】操作方法  930
银河麒麟桌面操作系统 V10-SP1 双系统安装 efi 分区问题  914
统信系统安装(合集)  852
统信桌面专业版【手动分区安装UOS系统】介绍  844
统启动异常几种类型(initramfs 模式)  687
最近下载排行榜
桌面通用(全架构)【在双系统环境下隐藏Windows启动菜单】操作指南 0
银河麒麟桌面操作系统V10(SP1)2203-如何进行远程桌面互访? 0
银河麒麟桌面操作系统【保留数据盘重装系统】 0
麒麟系统各种原因开不了机解决(合集) 0
桌面通用(全架构)【rpm包转成deb包】操作方法 0
银河麒麟桌面操作系统 V10-SP1 双系统安装 efi 分区问题 0
统信系统安装(合集) 0
统信桌面专业版【手动分区安装UOS系统】介绍 0
统启动异常几种类型(initramfs 模式) 0
作者收入月榜
1

prtyaa 收益393.72元

2

zlj141319 收益220.97元

3

1843880570 收益214.2元

4

IT-feng 收益213.03元

5

风晓 收益208.24元

6

777 收益172.82元

7

Fhawking 收益106.6元

8

信创来了 收益105.89元

9

克里斯蒂亚诺诺 收益91.08元

10

技术-小陈 收益79.5元

请使用微信扫码

加入交流群

请使用微信扫一扫!