返回首页

gbase数据、南大通用产品文档:GBase8c

更新日期:2024年09月11日

Hint 的错误、冲突及告警
Plan Hint 的结果会体现在计划的变化上,可以通过explain 来查看变化。
Hint 中的错误不会影响语句的执行,
只是不能生效,
该错误会根据语句类型以不同方式
提示用户。对于explain 语句,hint 的错误会以warning 形式显示在界面上,对于非explain
语句,会以debug1 级别日志显示在日志中,关键字为PLANHINT。
hint 的错误分为以下类型:

语法错误
语法规则树归约失败,会报错,指出出错的位置。
例如:
hint 关键字错误,
leading hint 或join hint 指定2 个表以下,
其它hint 未指定表等。
一旦发现语法错误,则立即终止hint 的解析,所以此时只有错误前面的解析完的hint 有效。
例如:
leading((t1 t2)) nestloop(t1) rows(t1 t2 #10)
nestloop(t1)存在语法错误,则终止解析,可用hint 只有之前解析的leading((t1 t2))。

语义错误

表不存在,存在多个,
或在leading 或join 中出现多次,均会报语义错误。

scanhint 中的index 不存在,会报语义错误。

另外,如果子查询提升后,
同一层出现多个名称相同的表,
且其中某个表
需要被hint,hint 会存在歧义,无法使用,需要为相同表增加别名规避。

hint 重复或冲突
如果存在hint 重复或冲突,只有第一个hint 生效,其它hint 均会失效,会给出提示。

hint 重复是指,
hint 的方法及表名均相同。
例如:
nestloop(t1 t2) nestloop(t1

GBase 8c V5 开发者手册
南大通用数据技术股份有限公司
575
t2)。

hint 冲突是指,table list 一样的hint,存在不一样的hint,hint 的冲突仅对
于每一类hint 方法检测冲突。
例如:nestloop (t1 t2) hashjoin (t1 t2),则后面与前面冲突,此时hashjoin 的hint 失效。
注意:nestloop(t1 t2)和no mergejoin(t1 t2)不冲突。
leading hint 中的多个表会进行拆解。例如:leading ((t1 t2 t3))会拆解成:leading((t1 t2))
leading(((t1 t2) t3)),此时如果存在leading((t2 t1)),则两者冲突,后面的会被丢弃。
(例
外:
指定内外表的hint 若与不指定内外表的hint 重复,
则始终丢弃不指定内外表的hint。


子链接提升后hint 失效
子链接提升后的hint 失效,会给出提示。通常出现在子链接中存在多个表连接的场景。
提升后,子链接中的多个表不再作为一个整体出现在join 中。

列类型不支持重分布
对于skew hint 来说,目的是为了进行重分布时的调优,所以当hint 列的类型不支持重
分布时,hint 将无效。

hint 未被使用

非等值join 使用hashjoin hint 或mergejoin hint。

不包含索引的表使用indexscan hint 或indexonlyscan hint。

通常只有在索引列上使用过滤条件才会生成相应的索引路径,
全表扫描将
不会使用索引,因此使用indexscan hint 或indexonlyscan hint 将不会使用。

indexonlyscan 只有输出列仅包含索引列才会使用,否则指定时hint 不会
被使用。

多个表存在等值连接时,
仅尝试有等值连接条件的表的连接,
此时没有关
联条件的表之间的路径将不会生成,所以指定相应的leading、join、rows hint 将不
使用,例如:t1 t2 t3 表join,t1 和t2,t2 和t3 有等值连接条件,则t1 和t3 不会优
先连接,leading(t1 t3)不会被使用。

生成stream 计划时,
如果表的分布列与join 列相同,
则不会生成redistribute
的计划;如果不同,且另一表分布列与join 列相同,只能生成redistribute 的计划,

GBase 8c V5 开发者手册
南大通用数据技术股份有限公司
576
不会生成broadcast 的计划,指定相应的hint 则不会被使用。

如果子链接未被提升,则blockname hint 不会被使用。

对于skew hint,hint 未被使用可能由于:

计划中不需要进行重分布。

hint 指定的列为包含分布键。

hint 指定倾斜信息有误或不完整,如对于join 优化未指定值。

倾斜优化的GUC 参数处于关闭状态。

onconfig.std 值
未设置

pathname = FAILOVER_CALLBACK 配置参数指定的脚本全路径名。

GBase 8s 管理员参考
南大通用数据技术股份有限公司 - 85 -
生效
编辑 onconfig 文件并重启数据库服务器之后。
用法
当数据库服务器从辅助服务器向主服务器或标准服务器转换时,数据库服务器执行
FAILOVER_CALLBACK 指定的脚本。FAILOVER_CALLBACK 设置为脚本的全路径名。

commit_delay
参数说明:表示一个已经提交的数据在WAL 缓冲区中存放的时间。
该参数属于USERSET 类型参数,请参考表15-1 中对应设置方法进行设置。
须知:
- 设置为非0 值时事务执行commit 后不会立即写入WAL 中,而仍存放在WAL 缓冲

GBase 8c V5 开发者手册
南大通用数据技术股份有限公司
1201
区中,等待WalWriter 进程周期性写入磁盘。
如果系统负载很高,在延迟时间内,
其他事务可能已经准备好提交。
但如果没有事务准
备提交,这个延迟就是在浪费时间。
取值范围:整型,0~100000,单位为微秒,其中0 表示无延迟。
默认值:0