TSpider 1.8功能介紹

jopen 9年前發布 | 13K 次閱讀 TSpider

TSpider 1.8功能介紹

【新功能】

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都為自動提交。

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!