关于连接池访问GBase 8a集群的检测连接可用性参数建议

所有的连接池,都提供了检测连接是否可用的功能,但一般是select 1这个简单的SQL。针对GBase 8a集群,建议改成查询一个空的express表来检测。特别是table_distribution表有event标注时。

select 1的局限

该SQL只需要连接节点本地执行,不需要访问其它节点。会导致一些错误无法探测到。比如脑裂了。

修改建议

创建一个空的express表,XXXX表示库名。可以用业务库,也可以单独建一个检测用的库。比如

create table XXXX.testForConnectioPool(id int)

然后将连接池探测连接可用性的SQL改成

select count(*) from XXXX.testForConnectioPool

因为是空表,可以快速的返回。

优点

如果连接节点有故障,不能访问其它节点,比如脑裂,元数据不一致(table_distributuion),则新的SQL会报错,连接池会从下一个IP继续建立新的连接,避免了如上问题发生时,后续SQL一直报错的情况。

局限性

如果业务是大量的短SQL,比如都是1秒以内的,如上的select count(*)也需要几十个毫秒,可能会对查询性能有影响。

但分析型业务,大部分还是秒级或分钟级的,多了这几十毫秒,可以忽略。