oceanbase / obproxy

A proxy server for OceanBase Database.
https://open.oceanbase.com
Other
114 stars 79 forks source link

obproxy failed to cast to target type when using varchar field in hash partition #32

Closed TyphoonTai closed 1 year ago

TyphoonTai commented 1 year ago

obproxy版本3.2.3、3.2.3.5

通过obproxy执行如下sql时,会出现截断报错,这可能影响proxy对partition的路由判断

select concat(tenant_name,'__', replace(NAME,' ','_')) NAME,VALUE
from oceanbase.gv$sysstat
join oceanbase.gv$tenant on CON_ID=tenant_id
where SVR_IP='xx.xx.xx.xx'
and NAME not in ('gts wait elapse total time','clog last check log file collect time')
union
select replace(NAME,' ','_'),sum(VALUE) VALUE
from oceanbase.gv$sysstat
join oceanbase.gv$tenant on CON_ID=tenant_id
where SVR_IP='xx.xx.xx.xx'
and NAME not in ('gts wait elapse total time','clog last check log file collect time','partition migrate time')
group by NAME

报错内容 image

wgs13579 commented 1 year ago

这个是合理的,MySQL 的 Hash 分区就是把值转成整形,然后取模。这个分区键的值 "172.30.199.49" 是不允许转成整形的

TyphoonTai commented 1 year ago

这个是合理的,MySQL 的 Hash 分区就是把值转成整形,然后取模。这个分区键的值 "172.30.199.49" 是不允许转成整形的

那这种Warning状态下,是否会导致obproxy找不到正确的分区呢?

wgs13579 commented 1 year ago

gv$sysstat 不是正常的表。正常的表,MySQL 模式下的 Hash 分区,不允许 varchar 类型的列作为分区键,也不允许整形列插入不能转换的字符串。自然也就不会出现你的这个 case image

longdafeng commented 1 year ago

close the issue