问题现象
OBProxy 日志中报错:[ERROR] decode varchar param value failed 。

问题原因
OBProxy 解析 SQL 路由错误。
解决方法
OBProxy 在解析 SQL 的时候,只会截取 4KB 的大小,在这 4KB 里没有找到分区键对应的值,因此获取不到路由信息,这条 SQL 就会随机发送到其中一个 OBServer 上执行,可能会产生比较多的远程事务,但是不会导致执行失败。
优化方式是将 SQL 中分区键的字段尽量往前移,如 T 表:
T(a int primary key, b longtext, c longtext, d longtext, partition by hash(a))
在对表进行 insert 时,避免这种把分区字段放在最后面:insert into T(b, c, d, a) values(...);,而应该使用:insert into T(a, b, c, d) values(...); 。
影响版本
OBProxy V4.2.x 及之前版本。