暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

gbase性能优化实例系列(一)

原创 欧阳无敌 2022-07-29
446

DML优化

关联优化

JOIN关联优化策略

逐个排查右表,对于右表是分布表且破坏hash分布的,如果数据量小,直接
修改为复制表,避免将大表进行拉表操作;如果数据量大(1亿条记录以上
的),通过调整gcluster_hash_redistribute_join_optimize参数进行验证,参数
设置
说明如下:
0 -- 拉复制表
1 -- 重分布
2 -- 自动评估,根据数据量,左右表行数接近使用重分布,如果差距大,则
小表拉复制表

关联顺序优化

优化原因
GCluster的优化器不会调整LEFT JOIN语句的顺序,而用户语句的JOIN顺
序可能不是最优,导致查询性能较低。
2. SQL特征
语句包含多个LEFT JOIN,多个LEFT JOIN的ON条件均为t1.colX = tn.colX
如:

SELECT x1.* FROM x1
LEFT JOIN x2 ON x1.many_duplicate_value = x2.many_duplicate_value
LEFT JOIN x3 ON x1.no_duplicate_value = x3.no_duplicate_value
LEFT JOIN x4 ON x1.hash_col = x4.hash_col

优化场景
语句特征满足上面的特征描述。
LEFT JOIN的右表,一些表可以直接与左表形成Hash JOIN关系,一些表可
能会导致左表发生膨胀

让形成Hash JOIN关系的LEFT JOIN先执行,避免拉表。
例如SQL特征中描述的语句,因为left join x4 on x1.hash_col = x4.hash_col
是Hash分布式JOIN,因此可以提到最前面,直接分布式执行。
让膨胀率小的LEFT JOIN先执行,减小拉表数据量。
如果参与JOIN条件的列的值的重复度较高,则很可能会造成LEFT JOIN结
果发生膨胀。一般来说,使用主键列参与的JOIN 条件,膨胀率是最小的;
而重复值越多的列,膨胀率就越可能高。

例如SQL 特征中描述的语句,因left join x3 on x1.no_duplicate_value =
x3.no_duplicate_value对x1的膨胀率比left join x2 on x1.many_duplicate_value
= x2.many_duplicate_value小,因此可以把left join x3提到left join x2 前面。
通过这种调整,避免对膨胀后的数据拉表,减小了拉表数据量。

示例语句

SELECT x1.* FROM x1
LEFT JOIN x2 ON x1.many_duplicate_value = x2.many_duplicate_value
LEFT JOIN x3 ON x1.no_duplicate_value = x3.no_duplicate_value
LEFT JOIN x4 ON x1.hash_col = x4.hash_col

改写后语句

SELECT x1.* FROM x1
LEFT JOIN x4 ON x1.hash_col = x4.hash_col
LEFT JOIN x3 ON x1.no_duplicate_value = x3.no_duplicate_value
LEFT JOIN x2 ON x1.many_duplicate_value = x2.many_duplicate_value; 

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论