近日,企業(yè)級(jí)開(kāi)源分布式數(shù)據(jù)庫(kù)廠(chǎng)商 PingCAP 正式發(fā)布TiDB 7.0 。TiDB 7.0 聚焦于幫助用戶(hù)通過(guò)可靠性能和簡(jiǎn)化數(shù)據(jù)庫(kù)操作來(lái)快速響應(yīng)業(yè)務(wù)需求,從而滿(mǎn)足客戶(hù)的高期望值,并提升開(kāi)發(fā)人員和 IT 運(yùn)維人員的生產(chǎn)力。新版本中,TiDB 在可擴(kuò)展性與性能、穩(wěn)定性與高可用、SQL 以及 可觀(guān)測(cè)性幾個(gè)領(lǐng)域獲得持續(xù)提升,累計(jì)引入新特性 20 余項(xiàng),優(yōu)化功能 50 余項(xiàng)。TiDB 7.0 是 TiDB 7 系列首個(gè) DMR 版本,適用于開(kāi)發(fā)、測(cè)試和 PoC 等場(chǎng)景。
在 7 系列版本以及之后 2-3 年的時(shí)間里, TiDB 在不斷迭代中將擁有:
更強(qiáng)的基礎(chǔ)能力(核心性能,擴(kuò)展性,性?xún)r(jià)比,云原生等);更加多元化的場(chǎng)景支持(多租戶(hù),更多數(shù)據(jù)模型支持,更好的生態(tài)適配);更順滑的運(yùn)維體驗(yàn)(更強(qiáng)的 DDL 能力,以 SQL 為統(tǒng)一界面的運(yùn)維體驗(yàn)等,智能運(yùn)維);更可靠更安全(更高的可用性,更好的安全體系整合,更多合規(guī)認(rèn)證)。這些主題都將逐步在 7 系列以及后續(xù)版本中落實(shí),給予用戶(hù)更優(yōu)的使用體驗(yàn),讓 TiDB 變成一個(gè)好用且泛用,可靠且經(jīng)濟(jì)的選擇。具體到 7.0 版本,TiDB 初步提供了更好的資源管控能力,讓 TiDB 針對(duì) SaaS 和多平臺(tái)統(tǒng)一共存等場(chǎng)景有了根本性的解決方案;其次,TiFlash 發(fā)布了面向云的存算分離新架構(gòu),這使其可以真正做到存算資源解耦,計(jì)算資源可以按需啟停,且基于 S3 的存儲(chǔ)設(shè)計(jì)也將大幅降低存儲(chǔ)成本;而諸如分析引擎支持落盤(pán),自動(dòng)執(zhí)行計(jì)劃緩存等,則是針對(duì)企業(yè)級(jí)場(chǎng)景做出的必要強(qiáng)化;最后,TiDB 7.0 提供了對(duì) MySQL 8.0 的兼容,這將使得相關(guān)用戶(hù)能更方便地遷移到 TiDB。
(資料圖片僅供參考)
1、資源管控增強(qiáng)多租戶(hù)形態(tài)下工作負(fù)載穩(wěn)定性
資源管控特性(Resource Control)在 TiDB 6.6 中引入(實(shí)驗(yàn)特性),在 TiDB 7.0 中得到增強(qiáng)和優(yōu)化,極大地提升 TiDB 集群的資源利用效率和性能表現(xiàn),為穩(wěn)定的多租戶(hù)奠定了基礎(chǔ)。資源管控特性對(duì) TiDB 具有里程碑的意義,用戶(hù)可以將一個(gè)分布式數(shù)據(jù)庫(kù)集群劃分成多個(gè)邏輯單元,將不同的數(shù)據(jù)庫(kù)用戶(hù)映射到對(duì)應(yīng)的資源組中,并根據(jù)需要設(shè)置每個(gè)資源組的配額。該功能允許為一個(gè)或多個(gè)會(huì)話(huà)組設(shè)置資源上限,如果來(lái)自某個(gè)工作負(fù)載或應(yīng)用程序的消耗異常重,則其資源消耗將被限制在配額內(nèi),以防止對(duì)其他更關(guān)鍵的工作負(fù)載造成干擾。
資源管控適用于以下場(chǎng)景:
用戶(hù)可以將多個(gè)應(yīng)用程序合并到單個(gè) TiDB 集群中,降低 TCO 并保證重要工作負(fù)載所需的資源。用戶(hù)可以在業(yè)務(wù)運(yùn)營(yíng)時(shí)間內(nèi)安全運(yùn)行批處理任務(wù)。模擬環(huán)境(Staging Environments)可共享具有受資源管控限制的單個(gè) TiDB 集群。
會(huì)話(huà)可通過(guò)三種方式綁定到資源組: 通過(guò) CREATE USER 或 ALTER USER 語(yǔ)句將用戶(hù)綁定到特定的資源組,使得用戶(hù)會(huì)話(huà)始終受到設(shè)定邊界約束; 通過(guò) SET RESOURCE GROUP 設(shè)置當(dāng)前會(huì)話(huà)的資源組; 也可通過(guò)優(yōu)化器 Hint RESOURCE_GROUP() 設(shè)置當(dāng)前語(yǔ)句的資源組。
2、TiFlash 支持?jǐn)?shù)據(jù)落盤(pán)來(lái)穩(wěn)定分析工作負(fù)載
TiFlash 是 TiDB 的列存儲(chǔ)和計(jì)算引擎,是數(shù)據(jù)庫(kù)分析工作負(fù)載能力的支柱。在 TiDB 7.0 之前,TiFlash 在內(nèi)存中處理所有數(shù)據(jù)。從這個(gè)版本開(kāi)始,TiFlash 支持?jǐn)?shù)據(jù)落盤(pán)功能(Spill to disk),通過(guò)調(diào)整算子內(nèi)存使用閾值,控制對(duì)應(yīng)算子的最大內(nèi)存使用量。對(duì)于大查詢(xún)而言,當(dāng)算子使用內(nèi)存超過(guò)一定閾值時(shí)會(huì)自動(dòng)將數(shù)據(jù)落盤(pán),犧牲一定的性能換取整體分析查詢(xún)的穩(wěn)定性。數(shù)據(jù)落盤(pán)操作根據(jù)用戶(hù)配置參數(shù)進(jìn)行,并適用于單個(gè)推送下去的操作。由于該優(yōu)化發(fā)生在單個(gè)運(yùn)算符級(jí)別上,因此必須在多個(gè)位置執(zhí)行數(shù)據(jù)落盤(pán)操作。在 TiDB 7.0 中,它首先被應(yīng)用于以下情況:
相等條件下的哈希連接;GROUP BYs 上的哈希聚合;窗口函數(shù)中 TopN 和排序運(yùn)算符。
在執(zhí)行這些操作期間,如果運(yùn)算符使用的內(nèi)存量超過(guò)了配置限制,會(huì)自動(dòng)將數(shù)據(jù)落盤(pán)并繼續(xù)進(jìn)行后續(xù)處理。為了說(shuō)明目標(biāo)工作負(fù)載受影響程度,我們模擬了決策支持系統(tǒng),使用 TPC-H 基準(zhǔn)測(cè)試工具進(jìn)行測(cè)試,結(jié)果如下表所示:
圖:TiFlash 存算分離架構(gòu)
TiFlash 存算分離架構(gòu) 適用于高性?xún)r(jià)比的數(shù)據(jù)分析場(chǎng)景。 在數(shù)據(jù)量很大,但是只有少量數(shù)據(jù)被頻繁查詢(xún),大部分冷數(shù)據(jù)很少被查詢(xún)的場(chǎng)景下,將經(jīng)常被查詢(xún)的數(shù)據(jù)緩存在 Compute Node 的本地 SSD 上,可以提供較快查詢(xún)性能,將大量冷數(shù)據(jù)存儲(chǔ)在成本較低的 S3 或者其他對(duì)象存儲(chǔ)上,從而節(jié)省存儲(chǔ)成本。 在計(jì)算資源需求有明顯的波峰和波谷場(chǎng)景下,例如晚上執(zhí)行的重型對(duì)賬查詢(xún),對(duì)計(jì)算資源要求較高,可以臨時(shí)擴(kuò)展 Compute Node,其他時(shí)間可以用較少的 Compute Node 完成查詢(xún)?nèi)蝿?wù)。 TiFlash 的存算分離架構(gòu)大幅降低了使用 TiFlash 支持分析工作負(fù)載的成本,并且提供了一定程度的工作負(fù)載隔離。 目前,TiUP 和 TiDB Operator 已經(jīng)支持部署和縮放 TiFlash 獨(dú)立組件的能力。
5、TTL 定期刪除過(guò)期數(shù)據(jù),為系統(tǒng)減負(fù)
TiDB 6.5 引入了 Time to live(TTL)實(shí)驗(yàn)特性,提供了行級(jí)別的生命周期控制策略,該項(xiàng)特性在 TiDB 7.0 中正式 GA。TTL 是一種通過(guò) SQL 配置設(shè)置表中行到期時(shí)間的方式,幫助用戶(hù)周期性且及時(shí)地清理不需要的數(shù)據(jù),并盡量減少對(duì)用戶(hù)負(fù)載的影響。TTL 以表為單位,并發(fā)地分發(fā)不同的任務(wù)到不同的 TiDB Server 節(jié)點(diǎn)上,進(jìn)行并行刪除處理。在某些情況下,較大的表格意味著查詢(xún)時(shí)間更長(zhǎng);較大的表格意味著更多的存儲(chǔ)成本;在 TiDB 中,一個(gè)表越大,Region 就越多,限制表格大小可以減輕系統(tǒng)負(fù)擔(dān);各種合規(guī)性要求可能需要設(shè)置數(shù)據(jù)過(guò)期?;诔杀?、性能或安全等因素考慮,數(shù)據(jù)庫(kù)管理員可以配置自動(dòng)檢查并刪除過(guò)期的表格行數(shù)據(jù),例如定期刪除驗(yàn)證碼、短網(wǎng)址記錄、不需要的歷史訂單、計(jì)算的中間結(jié)果等。
6、使用 Key 分區(qū)提高可擴(kuò)展性
在 7.0 之前,TiDB 支持 Hash、Range 和 List 分區(qū)。新版本引入了 key 分區(qū),與 Hash 分區(qū)類(lèi)似,Key 分區(qū)可以保證將數(shù)據(jù)均勻地分散到一定數(shù)量的分區(qū)里面。Hash 分區(qū)只能根據(jù)一個(gè)指定的整數(shù)表達(dá)式或字段進(jìn)行分區(qū),而 Key 分區(qū)可以根據(jù)字段列表進(jìn)行分區(qū),且 Key 分區(qū)的分區(qū)字段不局限于整數(shù)類(lèi)型。Key 分區(qū)提供了一種更靈活的方式來(lái)對(duì)數(shù)據(jù)集進(jìn)行劃分以改善集群的可擴(kuò)展性。
7、使用 Reorganize Partition 適應(yīng)不斷變化的需求
TiDB 長(zhǎng)期以來(lái)一直支持分區(qū),修改分區(qū)表的唯一方法是添加或刪除分區(qū)和截?cái)?LIST/RANGE 分區(qū)。TiDB 7.0 TiDB 支持 ALTER TABLE... REORGANIZE PARTITION 語(yǔ)法,用戶(hù)可以對(duì)表的部分或所有分區(qū)進(jìn)行重新組織,包括合并、拆分、或者其他修改,并且不丟失數(shù)據(jù),增加了可用性和靈活性以滿(mǎn)足不斷變化的需求。
8、使用 Load Data 從遠(yuǎn)程存儲(chǔ)導(dǎo)入數(shù)據(jù)
TiDB 7.0 中, LOAD DATA 語(yǔ)句集成 TiDB Lightning,用戶(hù)可以使用 LOAD DATA 語(yǔ)句完成原先需要使用 TiDB Lightning 才能完成的數(shù)據(jù)導(dǎo)入任務(wù)(實(shí)驗(yàn)特性),不僅可以省去 TiDB Lightning 的部署和管理成本,還可以借助 TiDB Lightning 的功能極大擴(kuò)展 LOAD DATA 語(yǔ)句的能力,包括:支持從 Amazon S3 和 Google Cloud Storage 導(dǎo)入數(shù)據(jù)到 TiDB,且支持使用通配符一次性匹配多個(gè)源文件導(dǎo)入到 TiDB;支持查詢(xún)?nèi)蝿?wù)狀態(tài),添加操作便利性等。