GaussDB(DWS)的cost_param参数影响

举报
dgt 发表于 2025/01/17 17:10:07 2025/01/17
274 0 0
【摘要】 cost_param对执行计划的影响

一、参数解释(来源dws8.2.1产品文档)

1、cost_param
参数说明:该参数用于控制在特定的客户场景中,使用不同的估算方法使得估算值与真实值更接近。此参数可以同时控制多种方法,与某一方法对应的位做与操作,不为0表示该方法被选择。
当cost_param & 1 不为0,表示对于求不等值连接选择率时选择一种改良机制,此方法在自连接(两个相同的表之间连接)的估算中更加准确,V300R002C00版本开始,已弃用cost_param & 1 不为0时的路径,默认选择更优的估算公式;
当cost_param & 2 不为0,表示求多个过滤条件(Filter)的选择率时,选择最小的作为总的选择率,而非两者乘积,此方法在过滤条件的列之间关联性较强时估算更加准确;
当cost_param & 4 不为0,表示在进行stream节点估算时,选用调试模型,该模型不推荐用户使用。
当cost_param & 16不为0,表示在计算两个及以上过滤条件或Join条件的综合选择率时,采用介于完全相关和完全不相关之间的一种模型,过滤条件较多时倾向于相关性较强的模型。
参数类型:USERSET
取值范围:整型,1~INT_MAX
默认值:16

2、从上面可以看出bit位为1,4位不推荐模型,下面主要讨论cost_param等于0,2,16的场景。

二、举例说明
1、以下面sql为例,t1表中a和b为强相关关系,增加了b='yy'条件,实际数据(a-rows)并没有改变,但估算数据(e-rows)大大减少。

SQL         a-rows e-rows(cost_param=16)
select count(1) from t1 where dt <= '20240101'  10150020823 10163212657
select count(1) from t1 where dt <= '20240101' and a='xx'   24517625 11158488
select count(1) from t1 where dt <= '20240101' and a='xx' and b='yy' 24517625 68297

通过查询统计信息,选择率a,b的选择率分别为0.001及0.006
2、当cost_param为0时,选择率继承开源pg的计算公式,选择率相乘,即0.001*0.006
3、当cost_param为2时,选择最小的作为总的选择率,即0.001
4、当cost_param=16时,结合两个选择率一起估算,但不是相乘,而是采用泊松算法,是0.001*0.006和0.001之间的一个数。
可以看到,cost_param=2时,估算最接近,而0和16时估算数据偏小,容易出现执行计划跳变大表广播的现象,导致语句执行时间忽快忽慢。
三、
目前产品默认cost_param=16,如果遇到相关性较强时,可以考虑通过hint或者session参数调整,业务上线后谨慎做全局调整。

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

作者其他文章

评论(0

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

    全部回复

    上滑加载中

    设置昵称

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

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

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