记一次数据另存,性能低下的解决案例(GaussDB 200)
【摘要】 有一条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:
写的函数不下推
@:
还是改成自带函数用一下
总结
- insert的目标表和select表分布列要保持一致
- 建议定期做analyze
- 尽量让执行下推到dn,如果没有下推,需要找到原因并解决
- 本案例由于使用了自定义函数,导致执行没有下推到dn,需要人为解决
1、使用alter function funcname immutable
2、使用数据库自带函数或语句替换自定义函数
点评
检查数据倾斜更好的办法是查看table_distribution这张表,详细可参考另外两篇文章
GaussDB(DWS)发生数据倾斜不要慌,一文教你轻松获取表倾斜率
GaussDB 200 数据倾斜问题定位套路
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)