【新功能】
1. TSpider集群后端并行功能
TSpider集群在接受应用层的SQL请求后,将判定SQL需要路由到哪些具体的remote实例执行,然后依次在各个remote实例执行并处理结果返回,即是串行执行,对DB侧单SQL响应时间敏感的业务可能会造成一定的影响。为此,tspider-1.8版本实现了后端分片的并行功能。
tspider-1.8版本中的后端并行执行比较于串行执行,对于现网业务中按普通索引查询跨16个分片的语句,单SQL响应时间减少为(1/12 -- 1/4),即单SQL响应速度提升为4--12倍。
其中4倍场景为跨分区查询非常简单,remote时间开销主要为网络开销;12倍场景为remote执行时间较长,比如select count(*) 的操作。
参数spider_bgs_mode控制是否打开并行功能, spider_bgs_mode=1则打开后端功能,当前spider_bgs_mode默认为0。
另外两个参数spider_parallel_limit、spider_parallel_group_order用于控制对于包含limit、group by, order by的SQL是否需要启用并行执行功能。
2. Spider后端连接池功能
某五星业务运营中出现瞬间连接数超1w的场景,DB侧报too many connections的错误瞬间拒绝服务。从MySQL性能测试来看,单DB实例在200个并发左右即可取得极限性能,过高的连接数反而会增大系统开销降低性能。
在tspider-1.8以前的版本中,tspider对remote实例维护一个无限制的连接池。若应用层瞬间发起N个会话,则tspider则维护N个与remote mysql实例的连接。
tspider-1.8实现更优的与remote 实例的连接池。
spider_max_connections参数用于控制tspider节点对单个remote mysql的最大连接数。spider_max_connections默认为0,为不打开连接池功能; spider_max_connection配置为大于0,为指定tspider节点与单个remote mysql实例中最大的连接个数; spider_max_connections的经验值为200。
另外, tspider-1.8的后端并行功能是通过多线程并行执行完成的,线程是与连接对象conn绑定的,即对单个remote db的线程资源数不会超过最大的连接数(spider_max_connections)。 为此,也可以通过spider_max_conncetions来限制后端并行功能中的线程数上限。
【Bug Fixed】
1. 修复关于时间类型比较可能无法得到正确结果的bug
tspider集群中, set timestamp类语句没有传递到remote。 对于SQL中出现在now()等时间函数是在本地算出精确值再分发到remote实例。那么select uin, svr_id from DBPlayerInfo where date(now()) - date(logout_time) > 14无法得到正确结果,因为now()计算出精确时间后在该SQL会被当作字符串,无法正确比较得到结果;只能采取logout_time <date_sub(now(),interval 14 day)的方式。
为此在没有指定set timestamp的场景则直接将now()分发到remote实例,而不是now()的具体结果。
2. 修复timestampdiff函数报语法错误的bug
时间函数timestampdiff需要进行特殊处理。
附TSpider 1.7功能介绍
1. 解决trucate可能导致连接池conn对象不回收而被误用的bug;
2. 增加参数: spider_ignore_autocommit。 默认是false的,打开会true。若应用层使用了autocommit=0,在启用这个参数后,当前事务提交,再次使用到该tspider到remote实例的,会自动将session级状态为设置autocommit=1(不再是应用层指定的0),后续执行的SQL都为自动提交。