內(nèi)核關(guān)鍵特性持續(xù)增強(qiáng)
支持在線 DDL 是 TiDB 的核心優(yōu)勢之一,在過往一年中,TiDB 加入了對并行 DDL 的支持,使得以往在 SaaS 等多租戶場景因 DDL 串行執(zhí)行互相阻塞導(dǎo)致的 DDL 語句間并發(fā)執(zhí)行效率低的問題得以解決,通過引入 Metadata Lock 基本消除了 DDL 干擾 DML 的情況。v6.5 版本通過轉(zhuǎn)變?nèi)繑?shù)據(jù)的索引創(chuàng)建模式、數(shù)據(jù)傳輸和并行導(dǎo)入三方面的改造,實(shí)現(xiàn)創(chuàng)建索引的性能的數(shù)量級提升。添加索引加速適用于單條 SQL 語句串行添加索引的場景,在多條 SQL 并行添加索引時僅對其中一條添加索引的 SQL 語句生效。經(jīng)過 Sysbench 基準(zhǔn)測試的驗(yàn)證,TiDB v6.5 在線 DDL 性能約是 TiDB v6.1 版本的 10 倍。
JSON 格式為應(yīng)用設(shè)計提供了更靈活的建模方式,目前越來越多的應(yīng)用采用 JSON 格式進(jìn)行數(shù)據(jù)交換和數(shù)據(jù)存儲。 特別是 Web3,游戲等行業(yè),使用 JSON 數(shù)據(jù)類型支持敏捷多變的業(yè)務(wù)。此類業(yè)務(wù)中存在大量實(shí)時數(shù)據(jù)分析需求,但是由于 JSON 數(shù)據(jù)類型比較復(fù)雜,對于 JSON 類型數(shù)據(jù)的分析具有很大的挑戰(zhàn)性。TiDB 陸續(xù)完善了 JSON 功能函數(shù)并對 MySQL 5.7 完整兼容,引入了針對 JSON 的表達(dá)式索引支持,更多的生態(tài)工具兼容。新版本支持將 JSON 函數(shù) “->”、”->>”、”JSON_EXTRACT()” 下推至 TiFlash,可以提高 JSON 類型數(shù)據(jù)的分析效率,拓展 TiDB 實(shí)時分析的應(yīng)用場景。
自 v6.5 版本起,TiDB 全局內(nèi)存控制能夠跟蹤到 TiDB 中主要的內(nèi)存消耗。當(dāng)全局內(nèi)存消耗達(dá)到 TiDB Server 所定義的內(nèi)存閾值時,TiDB 會嘗試 GC 或取消 SQL 操作等方法限制內(nèi)存使用,保證 TiDB 的穩(wěn)定性并提升內(nèi)存的使用效率。
在部分交易系統(tǒng)尤其是銀行業(yè)務(wù)中,應(yīng)用會在悲觀事務(wù)中利用 select for update 先鎖定一條記錄,從而達(dá)到對數(shù)據(jù)一致性的保護(hù),減少事務(wù)中后續(xù)操作失敗的可能。原先在 TiDB 中,對一行記錄反復(fù)的 select for update,可能會造成這條記錄的查詢性能下降。 v6.5 版本對此項(xiàng)機(jī)制進(jìn)行了優(yōu)化, 通過記錄連續(xù)的鎖標(biāo)記,降低了累積的悲觀鎖對查詢性能的影響,相同場景下 QPS 可大幅提升 10 倍以上。
易用性進(jìn)一步提升
線上購物場景,用戶經(jīng)常設(shè)置各種過濾條件,從大量商品中篩選到自己中意的商品。例如挑選一個手機(jī)殼,用戶可能會查找:“黑色 AND 鋁合金材質(zhì)” OR “透明 AND 硅膠材質(zhì)”。為了能夠快速響應(yīng)查詢,保證用戶體驗(yàn),數(shù)據(jù)庫表通常需要建很多索引。TiDB 的索引合并 (Index Merge)功能就是應(yīng)對此類問題的理想方案。在 v6.5 之前 TiDB 僅支持 OR 條件組合情況下的索引合并,在新版本中用戶可以任意組合 AND 與 OR 的過濾條件,實(shí)現(xiàn)與復(fù)合索引相近的性能,大大減少了索引對維護(hù)表健康的壓力,也保障了極佳的查詢響應(yīng)時間。
線上環(huán)境的數(shù)據(jù)誤操作容易導(dǎo)致生產(chǎn)事故,TiDB v6.5 引入的 FLASHBACK CLUSTER TO TIMESTAMP 支持在 Garbage Collection (GC) life time 內(nèi)快速回退整個集群到指定的時間點(diǎn),適用于快速撤銷 DML 誤操作。例如,在誤執(zhí)行了沒有 WHERE 子句的 DELETE 后,使用 FLASHBACK CLUSTER TO TIMESTAMP 能夠在幾分鐘內(nèi)將集群數(shù)據(jù)恢復(fù)到指定的時間點(diǎn)。尤其特別的是,該功能無需備份支持,單條 SQL 語句即可實(shí)現(xiàn)集群分鐘級別閃回,高效便捷;該功能還支持時間線上的多次回退,最大程度降低數(shù)據(jù)風(fēng)險。
在大批量的數(shù)據(jù)處理場景中,單一大事務(wù) SQL 處理可能對集群穩(wěn)定性和性能造成影響。新版本 TiDB 提供了將大事務(wù)自動拆分的能力,非事務(wù) DML 語句將一個 DML 語句拆成多個 SQL 語句在內(nèi)部執(zhí)行,拆分后的語句將犧牲事務(wù)原子性和隔離性,但是可以提升批量操作 SQL 的成功率,以及減少因內(nèi)存過大導(dǎo)致的 OOM 問題。
v6.5 版本中,TiFlash 通過支持 INSERT SELECT 語句,可將 TiFlash 計算結(jié)果保存到數(shù)據(jù)表中(即物化了 TiFlash 的查詢結(jié)果),方便重用分析計算的結(jié)果,節(jié)省系統(tǒng)資源并提高響應(yīng)速度。如果應(yīng)用開發(fā)者能充分利用物化結(jié)果,有效重用,那么 TiDB 系統(tǒng)的整體負(fù)載可以減少到原先重復(fù)執(zhí)行查詢的幾分之一甚至更多,與此同時對于物化結(jié)果表的查詢則可以控制到毫秒級,并支持比單純依賴 TiFlash 的情況高 3-4 個數(shù)量級的并發(fā)請求,足以應(yīng)對大規(guī)模在線業(yè)務(wù)。
此外,v6.5 版本加入了高性能的全局單調(diào)遞增主鍵的支持,該模式下 TiDB 將采取中心化的主鍵分配以確保單調(diào)遞增,即使跨 TiDB 實(shí)例訪問,ID 也不會出現(xiàn)回退,且針對其的寫入也可輕松達(dá)到數(shù)萬的 TPS。新版本 TiDB 新增 Time to Live (TTL) 能力,用戶可以設(shè)定行級別的生命周期控制策略。通過為表設(shè)置 TTL 屬性,TiDB 可以周期性地自動檢查并清理表中的過期數(shù)據(jù)。
多樣化的災(zāi)備能力
TiDB PITR(Point-in-Time Recovery)是結(jié)合了 BR 和變更捕獲(Change Data Capture)兩種能力的災(zāi)備特性,使得數(shù)據(jù)庫可以更靈活地恢復(fù)到任意時間點(diǎn)。以往 BR 的靜態(tài)災(zāi)備只能將數(shù)據(jù)恢復(fù)到備份的時間點(diǎn),如果要提供針對更新和更多時間點(diǎn)的恢復(fù),則需要提高備份頻率,會加重備份對在線業(yè)務(wù)的負(fù)擔(dān),也需要更多的存儲成本。使用 PITR 用戶無需不斷進(jìn)行全量備份,而是可經(jīng)由一個全量備份結(jié)合增量共同完成針對任意時間點(diǎn)的數(shù)據(jù)恢復(fù)。v6.5 新版本減少了 PITR 備份文件大小和數(shù)量,加強(qiáng)了穩(wěn)定性,大幅提升了性能。在日志恢復(fù)階段,單臺 TiKV 的恢復(fù)速度可以達(dá)到 30GiB/h,提升了 50%,并且恢復(fù)速度可擴(kuò)展,有效地降低容災(zāi)場景的 RTO 指標(biāo)。
與此同時,在 v6.5 版本中 TiCDC 的吞吐獲得了數(shù)倍的提升。當(dāng)下游為 Kafka 集群時,針對大單表場景的吞吐量得到了極大的提升,單個 TiCDC 節(jié)點(diǎn)可以支持 35k row/s QPS,吞吐量可以達(dá)到 50MB/s,并將延遲控制在 2 秒左右,而內(nèi)存使用量只有之前版本的 50% 左右。 在跨區(qū)域主備集群容災(zāi)場景中,TiCDC 單個節(jié)點(diǎn)的吞吐量可以達(dá)到 30MB/s,且延遲可以穩(wěn)定在 2 秒左右。新版本的 TiCDC 支持在向下游寫入時提供特殊的時間戳,下游集群可以自動使用該時間戳進(jìn)行一致性讀取而無需擔(dān)心讀到的事務(wù)不完整,使得下游集群在需要嚴(yán)苛事務(wù)保證的場景下也可以良好地承擔(dān)讀流量分流的職責(zé)。
TiDB Data Migration (DM) 在新版本中正式發(fā)布了在數(shù)據(jù)遷移過程中的增量數(shù)據(jù)持續(xù)校驗(yàn)功能,該特性只對新增或變更的數(shù)據(jù)進(jìn)行校驗(yàn),而不是對整個數(shù)據(jù)集進(jìn)行校驗(yàn),在確保數(shù)據(jù)遷移過程的準(zhǔn)確性和可靠性的同時,大大減少數(shù)據(jù)校驗(yàn)的時間和資源消耗。
深耕應(yīng)用開發(fā)者生態(tài)
提升 DBA 和開發(fā)者的使用體驗(yàn)一直是 TiDB 努力的重要方向。TiDB v6.5 強(qiáng)化了應(yīng)用開發(fā)所需的生態(tài)環(huán)境構(gòu)建,例如 TiDB 通過增加對 Savepoint,User Level Lock,Multiple Schema Change 等功能的支持,完善了針對常見應(yīng)用框架 django,prisma 等的支持。與此同時,PingCAP 也和更多的上下游生態(tài)伙伴建立了廣泛的合作關(guān)系,包括 Vercel,Hashicorp,Retool 等。
在 v6.5 版本中,TiCDC 新增向?qū)ο蟠鎯Γ∣bject Storage)寫入的支持。對象存儲是一種面向云的存儲服務(wù),具有高可擴(kuò)展性、高可用性、低成本等優(yōu)勢。使用 TiCDC 將數(shù)據(jù)同步到對象存儲,可以幫助用戶實(shí)現(xiàn)數(shù)據(jù)的長期存儲、數(shù)據(jù)的跨區(qū)域復(fù)制等。這也使得 TiDB 在云環(huán)境下能直接打通對接數(shù)倉和數(shù)據(jù)湖的通路。更好的生態(tài)支持將使得開發(fā)者在使用 TiDB 構(gòu)建應(yīng)用時,擁有更多選擇,也更加便利。
PingCAP 研發(fā)副總裁唐劉表示:此次發(fā)布的 TiDB v6.5 是 TiDB v6 系列的第二個長期支持版本,在成熟的 HTAP 平臺上進(jìn)一步提升了企業(yè)級關(guān)鍵能力,用戶可放心地在關(guān)鍵業(yè)務(wù)場景中使用。TiDB 將持續(xù)聚焦于產(chǎn)品內(nèi)核,不斷優(yōu)化企業(yè)級特性,為產(chǎn)品迭代打好堅實(shí)的基礎(chǔ)。在此基礎(chǔ)之上,TiDB 會在 Serverless、 DB 微服務(wù)化、智能化等方向上不斷拓展產(chǎn)品的邊界和能力,融入更多的數(shù)據(jù)和技術(shù)生態(tài),為用戶提供更多價值。
更多 TiDB 6.5 版本新功能,請查閱 TiDB 官網(wǎng) Release Notes:https://docs.pingcap.com/zh/tidb/stable/release-6.5.0
立即開啟 TiDB 體驗(yàn)之旅:https://pingcap.com/zh/product/
關(guān)于 PingCAP:
PingCAP 是業(yè)界領(lǐng)先的企業(yè)級開源分布式數(shù)據(jù)庫企業(yè),提供包括開源分布式數(shù)據(jù)庫產(chǎn)品、解決方案與咨詢、技術(shù)支持與培訓(xùn)認(rèn)證服務(wù),致力于為全球行業(yè)用戶提供穩(wěn)定高效、安全可靠、開放兼容的新型數(shù)據(jù)服務(wù)平臺,解放企業(yè)生產(chǎn)力,加速企業(yè)數(shù)字化轉(zhuǎn)型升級。