自 TiDB 5.0 發(fā)布以來(lái),陸續(xù)在金融、互聯(lián)網(wǎng) & 新經(jīng)濟(jì)、物流等行業(yè)用戶的生產(chǎn)環(huán)境得到應(yīng)用,收獲不少用戶的積極評(píng)價(jià):
TiDB 服務(wù) 58 金融、安居客等數(shù)倉(cāng)報(bào)表的復(fù)雜讀取與關(guān)聯(lián)查詢,在多表關(guān)聯(lián)查詢中,相比 4.0 版本性能最高提升達(dá) 90%;經(jīng)過(guò)網(wǎng)易互娛場(chǎng)景實(shí)測(cè),與 4.0 相比 TiDB 5.0 整體性能表現(xiàn)更加穩(wěn)定,沒(méi)有出現(xiàn)明顯的抖動(dòng);TiDB 5.0 在汽車之家大數(shù)據(jù) join 與聚合場(chǎng)景的應(yīng)用中,MPP 體現(xiàn)出明顯的優(yōu)勢(shì),與 MySQL 相比總體效能提升 20 - 50 倍。
“用戶的反饋激勵(lì)我們不斷前行,我們的使命是持續(xù)提升開發(fā)者和 DBA 的體驗(yàn),讓用戶用得省心,用得順手。” PingCAP 聯(lián)合創(chuàng)始人兼 CTO 黃東旭說(shuō),“ TiDB 每一個(gè)版本的發(fā)布都立足于解決 DBA 的痛點(diǎn)。真實(shí)場(chǎng)景就是最好的架構(gòu)師,從 5.0 版本開始 TiDB 縮短了發(fā)版周期,采用了更靈活、更敏捷的火車發(fā)版模型,每一個(gè)用戶真實(shí)場(chǎng)景需求的輸入,在兩個(gè)月周期內(nèi)就有可能成為下一個(gè)版本交付的功能。”
得益于大量用戶真實(shí)應(yīng)用場(chǎng)景的快速反饋,TiDB 5.1 提速發(fā)版,進(jìn)一步打造更流暢的企業(yè)級(jí)數(shù)據(jù)庫(kù)體驗(yàn)。TiDB 5.1 擁有更加穩(wěn)定的響應(yīng)延遲表現(xiàn),更優(yōu)的 MPP 性能與穩(wěn)定性,更便捷的可運(yùn)維性,開發(fā)者和 DBA 可以輕松地基于 TiDB 5.1 構(gòu)建任意規(guī)模的關(guān)鍵業(yè)務(wù)應(yīng)用。
TiDB 5.1 功能亮點(diǎn)和用戶價(jià)值
支持 ANSI SQL 99 標(biāo)準(zhǔn)的 Common Table Expression,用戶可以寫出更加簡(jiǎn)潔、更易維護(hù)的 SQL 代碼,輕松應(yīng)對(duì)復(fù)雜的業(yè)務(wù)邏輯,提高開發(fā)效率。進(jìn)一步提升 MPP 性能和穩(wěn)定性,幫助用戶更快做出實(shí)時(shí)決策。5.1 通過(guò)支持 MPP 模式下的分區(qū)表以及新增的多個(gè)函數(shù)表達(dá)式和算子優(yōu)化,實(shí)時(shí)分析性能提升一個(gè)數(shù)量級(jí)以上;通過(guò)增強(qiáng)的內(nèi)存管理和負(fù)載平衡機(jī)制,讓分析查詢變得更快、更穩(wěn)。在突發(fā)的大流量寫入、集群擴(kuò)縮容以及在線數(shù)據(jù)導(dǎo)入和備份等場(chǎng)景下,5.1 版本優(yōu)化了數(shù)據(jù)庫(kù)的長(zhǎng)尾查詢延遲的穩(wěn)定性,應(yīng)對(duì)不同的工作負(fù)載,延遲能夠降低 20% - 70% 。尤其對(duì)于金融行業(yè)延遲敏感類型的關(guān)鍵業(yè)務(wù)應(yīng)用,大幅提升了在高壓力負(fù)載下的查詢穩(wěn)定性。支持列類型變更,與 MySQL 兼容度更高。5.1 新增 Stale Read 模式,在讀寫分離場(chǎng)景中通過(guò)打散讀熱點(diǎn)大幅提升讀吞吐能力;引入新的系統(tǒng)表,實(shí)現(xiàn)在高并發(fā)事務(wù)場(chǎng)景中快速定位鎖沖突;改進(jìn)統(tǒng)計(jì)信息分析引擎,提升優(yōu)化器選擇索引的精準(zhǔn)度,保障業(yè)務(wù)查詢的效率和穩(wěn)定性。面向大集群提供更加友好的運(yùn)維體驗(yàn),進(jìn)一步降低 DBA 工作負(fù)荷。5.1 版本集群擴(kuò)縮容和數(shù)據(jù)遷移速度提升 40%,改善了大規(guī)模集群運(yùn)維的可靠性,降低大規(guī)模集群整體備份和恢復(fù)的耗時(shí),通過(guò)優(yōu)化 CDC 數(shù)據(jù)鏈路臨時(shí)中斷后的自動(dòng)恢復(fù)機(jī)制,進(jìn)一步提升數(shù)據(jù)同步鏈路的可靠性。
Common Table Expression 讓 SQL 化繁為簡(jiǎn)
在金融交易類場(chǎng)景,由于業(yè)務(wù)的客觀復(fù)雜性,有時(shí)候會(huì)寫出長(zhǎng)達(dá) 2000 行的單條 SQL 語(yǔ)句,其中包含大量的聚合和多層子查詢嵌套,維護(hù)此類 SQL 堪稱開發(fā)人員的噩夢(mèng)。5.1 版本支持 ANSI SQL 99 標(biāo)準(zhǔn)的 Common Table Expression(CTE)及遞歸的寫法,極大提升開發(fā)人員和 DBA 編寫復(fù)雜業(yè)務(wù)邏輯 SQL 的效率,增強(qiáng)代碼的可維護(hù)性。
HTAP 實(shí)時(shí)分析能力再升級(jí)
進(jìn)一步提升 MPP 的性能和穩(wěn)定性
5.1 版本進(jìn)一步增強(qiáng) TiFlash MPP 計(jì)算引擎的綜合能力,幫助用戶提升業(yè)務(wù)決策速度:
MPP 支持分區(qū)表,結(jié)合業(yè)務(wù)邏輯可優(yōu)化海量數(shù)據(jù)分析查詢所消耗的資源,提升查詢速度;新增多個(gè)常用 SQL 函數(shù)支持,并優(yōu)化算子使得查詢能夠更充分利用 MPP 來(lái)加速;提供便利的強(qiáng)制 MPP 模式開關(guān),用戶可自主決定是否開啟 MPP 模式;通過(guò)優(yōu)化集群負(fù)荷的分散與平衡機(jī)制,消除熱點(diǎn),提升系統(tǒng)“綜合”承載能力;修復(fù)引擎內(nèi)存使用問(wèn)題,提供更加平穩(wěn)流暢的使用體驗(yàn)。
提升高壓力負(fù)載下查詢分析的穩(wěn)定性
在金融類業(yè)務(wù)場(chǎng)景下,技術(shù)人員每天會(huì)對(duì)數(shù)據(jù)進(jìn)行高壓力的跑批計(jì)算,生成最新的市場(chǎng)和營(yíng)銷分析報(bào)告,以輔助商業(yè)決策。跑批流程對(duì)連續(xù)性要求極高,無(wú)法容忍中間過(guò)程出錯(cuò)。針對(duì)該場(chǎng)景,5.1 版本優(yōu)化了 TiDB 的請(qǐng)求重試機(jī)制和 TiKV 的請(qǐng)求處理機(jī)制,顯著降低了在高負(fù)載下由于 TiFlash 同步數(shù)據(jù)不及時(shí)導(dǎo)致的 Region Unavailable 出錯(cuò)概率。
無(wú)縫集成 TiSpark
TiSpark 5.1 版本實(shí)現(xiàn)了對(duì)含有聚簇索引表的讀寫支持,不帶來(lái)任何額外的性能開銷,對(duì)用戶完全透明,用戶可以立刻遷移到新版 TiSpark 來(lái)體驗(yàn)與 TiDB 5.1 的無(wú)縫集成。
降低讀寫延遲抖動(dòng)
在延遲敏感的應(yīng)用場(chǎng)景下,當(dāng)線上產(chǎn)生突發(fā)寫流量、操作 TiDB 擴(kuò)縮容、后臺(tái)執(zhí)行統(tǒng)計(jì)任務(wù),以及在線數(shù)據(jù)導(dǎo)入和備份時(shí),可能造成數(shù)據(jù)庫(kù)的 P99 和 P999 百分位的延遲抖動(dòng),對(duì)長(zhǎng)尾查詢產(chǎn)生一定影響
TiDB 5.1 加強(qiáng)了對(duì)磁盤讀寫鏈路的管理,限制后臺(tái)任務(wù)對(duì)磁盤資源的使用,大幅降低上述場(chǎng)景對(duì)線上業(yè)務(wù)的干擾,改善讀寫鏈路的效率和穩(wěn)定性。在 AWS EC2 r5b.4xlarge 實(shí)例掛載 EBS gp3 盤的環(huán)境下,通過(guò) TPC-C 基準(zhǔn)測(cè)試(10k WH)的實(shí)測(cè)結(jié)果:
操作集群從 6 臺(tái) TiKV 縮到 3 臺(tái),P99 響應(yīng)時(shí)間降低 20%,P999 響應(yīng)時(shí)間降低 15%;執(zhí)行在線導(dǎo)入 200GB 數(shù)據(jù),P99 響應(yīng)時(shí)間降低 71%,P999 響應(yīng)時(shí)間降低 70%。
增強(qiáng)業(yè)務(wù)開發(fā)靈活性
支持列類型變更
在典型的 TiDB 應(yīng)用場(chǎng)景中,經(jīng)常借助 binlog 將多個(gè) MySQL 上游數(shù)據(jù)匯聚到一個(gè) TiDB 集群。原先 TiDB 不支持變更列類型的操作,如果上游 MySQL 修改表的字段類型會(huì)導(dǎo)致與 TiDB 數(shù)據(jù)同步的中斷。5.1 版本新增對(duì)修改列類型 DDL 語(yǔ)句的支持,解決上述問(wèn)題并進(jìn)一步提升MySQL 兼容性。
Stale Read(實(shí)驗(yàn)特性)
Stale Read 適用于讀多寫少并且能夠容忍讀到舊數(shù)據(jù)的場(chǎng)景。例如 Twitter 用戶發(fā)出一條消息后,系統(tǒng)會(huì)產(chǎn)生成千上萬(wàn)甚至上億次讀取,并且新發(fā)出的消息在一定時(shí)間后被讀到是可以容忍的。該場(chǎng)景給數(shù)據(jù)庫(kù)帶來(lái)相當(dāng)大的讀并發(fā)壓力,可能會(huì)產(chǎn)生讀熱點(diǎn),導(dǎo)致節(jié)點(diǎn)的負(fù)載分布不均,整體吞吐成為瓶頸。借助 Stale Read,用戶可以指定一個(gè)過(guò)去的時(shí)間點(diǎn)從任意一個(gè)數(shù)據(jù)副本讀取數(shù)據(jù)(不必從 leader 讀取),從而顯著分散節(jié)點(diǎn)的壓力負(fù)載,使得整體讀吞吐能力提升近一倍。
/* 例如:可以通過(guò)設(shè)置當(dāng)前事務(wù)為查詢 5 秒之前的數(shù)據(jù)狀態(tài)來(lái)開啟 Stale Read */
> SET TRANSACTION READ ONLY AS OF TIMESTAMP NOW() - INTERVAL 5 SECOND;
> SELECT * FROM T;
快速定位鎖沖突 (實(shí)驗(yàn)特性)
業(yè)務(wù)開發(fā)需要很謹(jǐn)慎地處理數(shù)據(jù)庫(kù)并發(fā)事務(wù),一旦發(fā)生鎖表會(huì)給線上業(yè)務(wù)帶來(lái)巨大影響,而 DBA 需要快速定位鎖表原因以保證業(yè)務(wù)能夠恢復(fù)正常。TiDB 5.1 中新增 Lock View 系統(tǒng)表視圖,可以快速定位到引起鎖表的事務(wù)和相關(guān) SQL 語(yǔ)句,從而提高鎖沖突問(wèn)題的處理效率。下面一個(gè)小例子展示如何使用 Lock View 快速定位發(fā)生鎖表的事務(wù)和 SQL 語(yǔ)句。
更快更準(zhǔn)的統(tǒng)計(jì)信息分析
隨著業(yè)務(wù)數(shù)據(jù)持續(xù)不斷的變更,表的統(tǒng)計(jì)信息也會(huì)變得陳舊,進(jìn)而導(dǎo)致優(yōu)化器執(zhí)行計(jì)劃準(zhǔn)確度降低,使得查詢變慢。DBA 通過(guò)執(zhí)行 ANALYZE 操作,對(duì)表的統(tǒng)計(jì)信息進(jìn)行重建。TiDB 5.1 對(duì) ANALYZE 采樣算法的性能進(jìn)行了優(yōu)化,生成統(tǒng)計(jì)信息的平均時(shí)間縮減為二分之一,同時(shí)新增一項(xiàng)新的統(tǒng)計(jì)數(shù)據(jù)類型,讓優(yōu)化器選擇索引更加準(zhǔn)確。
提升大集群運(yùn)維和數(shù)據(jù)傳輸?shù)目煽啃?/p>
超多數(shù)量表的備份優(yōu)化
優(yōu)化超多數(shù)量表的備份,在 50k 張表的量級(jí)下,TiDB 集群全量備份時(shí)間降低到之前的 30~40%。此外, 5.1 版本優(yōu)化了備份模塊的元信息文件組織形式(簡(jiǎn)稱v2),啟動(dòng) BR 時(shí)可以通過(guò)指定參數(shù) “--backupmeta-version=2” 來(lái)啟用 v2,從而減少單次寫入量來(lái)降低內(nèi)存消耗,有效避免低規(guī)格內(nèi)存(≤8GB)環(huán)境下的異常退出。
提升大規(guī)模集群運(yùn)維可靠性
TiDB 集群規(guī)模越大對(duì)生產(chǎn)集群擴(kuò)縮容、硬件升級(jí)以及節(jié)點(diǎn)搬遷等日常運(yùn)維操作的耗時(shí)就越久。TiDB 5.1 顯著提升了擴(kuò)縮容時(shí)數(shù)據(jù)遷移的性能,以下是兩組測(cè)試結(jié)果:
100 個(gè)節(jié)點(diǎn)規(guī)模下,完成集群所有數(shù)據(jù)跨數(shù)據(jù)中心遷移的耗時(shí)降低 20%;下線節(jié)點(diǎn)或?qū)δ彻?jié)點(diǎn)的數(shù)據(jù)進(jìn)行遷移,耗時(shí)縮短約 40%。
優(yōu)化內(nèi)存使用
內(nèi)存溢出(Out Of Memory)一直是困擾數(shù)據(jù)庫(kù)行業(yè)的典型問(wèn)題,5.1 版本針對(duì) TiDB 的內(nèi)存使用進(jìn)行了一系列優(yōu)化,從而降低 OOM 風(fēng)險(xiǎn):
無(wú)論數(shù)據(jù)量大小,窗口函數(shù) row_number 將只占用固定大小內(nèi)存;優(yōu)化分區(qū)表的讀取,占用更少內(nèi)存;為存儲(chǔ)層加入可配置的內(nèi)存限制,當(dāng)限制觸發(fā)時(shí),系統(tǒng)將釋放部分緩存以降低內(nèi)存占用;TiFlash 寫入的內(nèi)存占用比上一版本降低 80%。
提升 CDC 同步鏈路可靠性
TiCDC 5.1 在無(wú)需人工干預(yù)的情況下提供同步鏈路的可靠性:當(dāng)發(fā)生環(huán)境擾動(dòng)或硬件故障時(shí),TiCDC 可以保證同步持續(xù)進(jìn)行;即使發(fā)生同步中斷,TiCDC 也會(huì)根據(jù)實(shí)際情況自動(dòng)進(jìn)行重試。
最后,特別感謝小米、奇虎 360、知乎、愛(ài)奇藝、理想汽車、新浪、虎牙、小電、跨越速運(yùn)、億瑪科技等公司和社區(qū)開發(fā)者們?cè)?TiDB 5.1 版本的設(shè)計(jì)、開發(fā)和測(cè)試過(guò)程中做出的貢獻(xiàn),是你們一如既往的支持,幫助 TiDB 在實(shí)際場(chǎng)景中持續(xù)提升開發(fā)者和 DBA 的使用體驗(yàn),讓 TiDB 變得更加簡(jiǎn)單易用。