记一次数据另存,性能低下的解决案例(GaussDB 200)

举报
昙花逐月 发表于 2021/07/07 21:37:54 2021/07/07
【摘要】 有一条INSERT INTO … SELECT …语句,SELECT的查询结果有36W,只执行查询语句约耗时10秒,执行INSERT … SELECT…语句,耗时10分钟左右,过程中没有报错。该表设置了3个分布健,使用语句"select table_skewness(‘tablename’)"查看数据分布,也没有数据倾斜的情况。请问下这种SQL执行慢应该怎么进行排查。 分析insert...

场景

有一条INSERT INTO … SELECT …语句,SELECT的查询结果有36W,只执行查询语句约耗时10秒,执行INSERT … SELECT…语句,耗时10分钟左右,过程中没有报错。

该表设置了3个分布健,使用语句"select table_skewness(‘tablename’)"查看数据分布,也没有数据倾斜的情况。
请问下这种SQL执行慢应该怎么进行排查。

分析

  • insert的目标表和select表分布列要保持一致
  • 意思是INSERT目标表的分布列需要是SELECT查询表的分布列吗?SELECT语句用到了多张表。。。
  • 那你打印一下执行计划看看,表都做过analyze了吧?
  • 没有做analyze

  • 表扫描怎么都不下推?,先收集统计信息,再看一下
  • sql发一下
  • 大佬我加你好友了,sql在内网,又比较长,只能明天拿出来了,到时候麻烦你帮忙看一下
  • 看看有没有少见的函数和自定义函数。应该是这个原因。重点看自定义函数
  • 还真有一个自定义函数我让同事去掉自定义函数跑跑看
  • 感谢两位大佬,还真是使用了自定义函数的问题。@a╄セ许,carrib @康海峰
康海峰:
搜下关键字。immutable应该是这样拼的。

康海峰:
手册搜下看看。自定义函数章节

康海峰:
最简单就是暴力试试,不行就得考虑改写。

alter function funcname immutable。大概这样的语法
----------------------------------------------------------
@:
好嘞 我研究一下  感谢大佬

a╄セ许,carrib:
你用的啥函数?

@:
写了一个month_between的函数

a╄セ许,carrib:
写的函数不下推

@:
还是改成自带函数用一下

总结

  1. insert的目标表和select表分布列要保持一致
  2. 建议定期做analyze
  3. 尽量让执行下推到dn,如果没有下推,需要找到原因并解决
  • 本案例由于使用了自定义函数,导致执行没有下推到dn,需要人为解决
    1、使用alter function funcname immutable
    2、使用数据库自带函数或语句替换自定义函数

点评

检查数据倾斜更好的办法是查看table_distribution这张表,详细可参考另外两篇文章
GaussDB(DWS)发生数据倾斜不要慌,一文教你轻松获取表倾斜率
GaussDB 200 数据倾斜问题定位套路

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。