所有的连接池,都提供了检测连接是否可用的功能,但一般是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(*)也需要几十个毫秒,可能会对查询性能有影响。
但分析型业务,大部分还是秒级或分钟级的,多了这几十毫秒,可以忽略。