“當(dāng)用戶使用軟件時,會需要面對的兩個鴻溝:一個是執(zhí)行的鴻溝,在這里,用戶要弄清楚如何操作,與軟件「對話」;另一個是評估的鴻溝,用戶要弄清楚操作的結(jié)果。” PingCAP 聯(lián)合創(chuàng)始人兼 CTO 黃東旭在《做出讓人愛不釋手的基礎(chǔ)軟件》中提到,“ 我們作為設(shè)計師的使命就是幫助用戶消除可觀測性和可交互性這兩個鴻溝。”
2021 年 11 月 30 日,TiDB 5.3.0 版本正式上線,該版本推出持續(xù)性能分析 (Continuous Profiling) 功能(目前為實驗特性),跨越可觀測性的鴻溝,為用戶帶來數(shù)據(jù)庫源碼水平的性能洞察,徹底解答每一個數(shù)據(jù)庫問題。
在提升數(shù)據(jù)可觀測性的同時,TiDB 5.3.0 實現(xiàn)了 HTAP 性能和穩(wěn)定性的大幅提升,數(shù)據(jù)遷移效率、高可用性和易用性也實現(xiàn)了大幅提升,為所有用戶帶來重磅福利。
5.3.0 功能亮點與用戶價值
- 支持持續(xù)性能分析 (Continuous Profiling) ,引領(lǐng)數(shù)據(jù)庫的可觀測性潮流
- 深度優(yōu)化分布式時間戳獲取技術(shù),提升系統(tǒng)的整體性能
- 持續(xù)優(yōu)化存儲和計算引擎,提供更敏捷更可靠的 HTAP 服務(wù)
- 進(jìn)一步降低上游系統(tǒng)同步數(shù)據(jù)至 TiDB 的延遲,助力高峰期業(yè)務(wù)增長
- 新增并行導(dǎo)入功能,提升全量數(shù)據(jù)遷移效率
- 引入臨時表,一條 SQL 語句簡化業(yè)務(wù)邏輯并提升性能
支持持續(xù)性能分析,引領(lǐng)數(shù)據(jù)庫的可觀測性潮流
在企業(yè)遭遇的 IT 故障中,約有 30% 與數(shù)據(jù)庫相關(guān)。當(dāng)這些故障涉及到應(yīng)用系統(tǒng)、網(wǎng)絡(luò)環(huán)境、硬件設(shè)備時,恢復(fù)時間可能達(dá)到數(shù)小時,對業(yè)務(wù)連續(xù)性造成破壞,影響用戶體驗甚至營收。在復(fù)雜分布式系統(tǒng)場景下,如何提高數(shù)據(jù)庫的可觀測性,幫助運維人員快速診斷問題,優(yōu)化故障處理流程一直是困擾著企業(yè)的一大難題。在 TiDB 5.3.0 版本中,PingCAP 率先在數(shù)據(jù)庫領(lǐng)域推出了持續(xù)性能分析 (Continuous Profiling) 特性(目前為實驗特性),為企業(yè)提供了數(shù)據(jù)庫源碼水平的性能洞察。
持續(xù)性能分析以低于 0.5% 的性能損耗實現(xiàn)了對數(shù)據(jù)庫內(nèi)部運行狀態(tài)持續(xù)打快照(類似 CT 掃描),以火焰圖的形式從系統(tǒng)調(diào)用層面解讀資源開銷。讓原本黑盒的數(shù)據(jù)庫變成白盒。在 TiDB Dashboard 上一鍵開啟持續(xù)性能分析后,運維人員可以方便快速定位性能問題的根因,無論過去現(xiàn)在皆可回溯。
- 當(dāng)數(shù)據(jù)庫意外宕機(jī)時,可降低至少 50% 診斷時間
在互聯(lián)網(wǎng)行業(yè)的一個案例中,當(dāng)客戶集群出現(xiàn)報警業(yè)務(wù)受影響時,因缺少數(shù)據(jù)庫連續(xù)性能分析結(jié)果,運維人員難以發(fā)現(xiàn)故障根因,耗費 3 小時才定位問題恢復(fù)集群。如果使用 TiDB 的持續(xù)性能分析功能,運維人員可比對日常和故障的分析結(jié)果,僅需 20 分鐘就可恢復(fù)業(yè)務(wù),極大減少損失。
- 在日常運行中,可提供集群巡檢和性能分析服務(wù),保障集群持續(xù)穩(wěn)定運行
- 持續(xù)性能分析是 TiDB 集群巡檢服務(wù)的關(guān)鍵,為商業(yè)客戶提供了集群巡檢和巡檢結(jié)果數(shù)據(jù)上報。客戶可以自行發(fā)現(xiàn)和定位潛在風(fēng)險,執(zhí)行優(yōu)化建議,保證每個集群持續(xù)穩(wěn)定運行。
- 在數(shù)據(jù)庫選型時,提供更高效的業(yè)務(wù)匹配
- 在進(jìn)行數(shù)據(jù)庫選型時,企業(yè)往往需要在短時間內(nèi)完成功能驗證、性能驗證的流程。持續(xù)性能分析功能能夠協(xié)助企業(yè)更直觀地發(fā)現(xiàn)性能瓶頸,快速進(jìn)行多輪優(yōu)化,確保數(shù)據(jù)庫與企業(yè)的業(yè)務(wù)特征適配,提高數(shù)據(jù)庫的選型效率。
注:性能分析結(jié)果存儲在監(jiān)控節(jié)點上,不會對處理業(yè)務(wù)流量的節(jié)點產(chǎn)生影響。
深度優(yōu)化分布式時間戳獲取技術(shù),為海量業(yè)務(wù)數(shù)據(jù)處理提供堅強(qiáng)后盾
當(dāng)互聯(lián)網(wǎng)行業(yè)的核心業(yè)務(wù)系統(tǒng)具有龐大的用戶數(shù)量和業(yè)務(wù)數(shù)據(jù)時,在高并發(fā)訪問的場景下,可能會出現(xiàn)數(shù)據(jù)庫時間戳獲取延遲增大而導(dǎo)致業(yè)務(wù)響應(yīng)變慢、超時頻發(fā)、用戶體驗急劇下降的情況。海量的業(yè)務(wù)數(shù)據(jù)要求數(shù)據(jù)庫擁有良好的擴(kuò)展性。TiDB 本身擁有能夠水平擴(kuò)展的優(yōu)勢,但是不斷增長的業(yè)務(wù)數(shù)據(jù)量使時間戳獲取能力逐漸成為阻礙集群擴(kuò)展的瓶頸,最終限制集群整體的擴(kuò)展。
為進(jìn)一步提升時間戳獲取能力,在 TiDB 5.3.0 版本中,TiDB 在保持原有的全局時間戳管理方式的基礎(chǔ)上,新增兩個時間戳處理調(diào)優(yōu)參數(shù),在 PD 負(fù)載達(dá)到瓶頸的情況下,可以有效減輕負(fù)載,降低了時間戳獲取延遲,大大提升了系統(tǒng)的整體性能:
- 支持參數(shù)設(shè)置 PD follower proxy 開關(guān),開啟后允許 follower 批量轉(zhuǎn)發(fā)時間戳處理請求。
- 支持設(shè)置 PD client 批量處理時間戳的最大等待時間參數(shù),提高時間戳請求的處理帶寬。
通過本次優(yōu)化,TiDB 能夠更好地支撐百 TB 或百萬 QPS 大規(guī)模集群的擴(kuò)展。經(jīng)過 Sysbench 512 線程的測試驗證,時間戳處理流程優(yōu)化后,TiDB 集群整體 QPS 吞吐提升了 100% 以上。
具體測試環(huán)境如下:
本次優(yōu)化適用于以下場景:
- 擁有百 TB 或 百萬 QPS 以上超大規(guī)模集群,需要實現(xiàn)大規(guī)模集群的擴(kuò)展。
- 擁有中等規(guī)模集群,但隨著業(yè)務(wù)的急速增長,數(shù)據(jù)的成倍增加,需要實現(xiàn)集群的無限擴(kuò)展。
持續(xù)優(yōu)化存儲和計算引擎,提供更敏捷更可靠的 HTAP 服務(wù)
在大型物流和金融服務(wù)類企業(yè)中,在線交易和實時業(yè)務(wù)監(jiān)控等應(yīng)用場景對數(shù)據(jù)有較高的一致性和時效性要求,尤其是當(dāng)讀寫混合負(fù)載大時,會對數(shù)據(jù)庫管理系統(tǒng)的性能和穩(wěn)定性形成較大挑戰(zhàn)。在年度流量峰值時段,數(shù)據(jù)平臺的寫入/更新和分析任務(wù)往往會激增數(shù)倍。例如,某合作伙伴(物流龍頭)在雙十一期間,每天處理超 2500 億條更新和插入記錄,同時還要兼顧海量歷史數(shù)據(jù)(50 億~100 億)的分析任務(wù)。
TiDB HTAP 致力于為企業(yè)的規(guī)?;诰€交易和實時分析應(yīng)用提供一棧式數(shù)據(jù)服務(wù)平臺,提升關(guān)鍵業(yè)務(wù)的時效性,降低數(shù)據(jù)技術(shù)棧的復(fù)雜性。在已有產(chǎn)品基礎(chǔ)上,TiDB 5.3.0 進(jìn)一步優(yōu)化了 HTAP 的性能和穩(wěn)定性,大幅改善了高混合負(fù)載場景下并發(fā)查詢能力和查詢?nèi)蝿?wù)的執(zhí)行速度。主要的改進(jìn)包括:
- 性能大幅提升(50%~100%),CPU /內(nèi)存資源使用率進(jìn)一步優(yōu)化,查詢失敗減少:TiDB 5.3.0 優(yōu)化了列式存儲引擎,調(diào)整了存儲引擎底層文件結(jié)構(gòu)和 IO 模型,優(yōu)化了訪問節(jié)點副本和文件區(qū)塊的計劃,緩和了寫放大問題以及改進(jìn)了普遍的代碼效率。總體上高負(fù)載時因資源不足造成的失敗狀況大大緩解。
- 遠(yuǎn)程數(shù)據(jù)讀取提速,任務(wù)成功率提高,告警可讀性增強(qiáng):優(yōu)化了 MPP 計算引擎,支持更多的字符串/時間和其他函數(shù)/算子下推至 MPP 引擎,并改善了存儲層寫入/更新事務(wù)量較大時數(shù)據(jù)等待造成內(nèi)部進(jìn)程超時的問題,同時還優(yōu)化了查詢請求的告警信息,便于追蹤和定位問題。
- 輕松擴(kuò)展節(jié)點:在 TiDB 5.3.0 中,TiDB HTAP 架構(gòu)可隨業(yè)務(wù)增長輕松擴(kuò)展到 200 節(jié)點甚至更大的集群規(guī)模,并且確保 OLTP 與 OLAP 之間原則上不產(chǎn)生資源沖突和相互性能影響。
- 增強(qiáng)運維能力:完善了數(shù)據(jù)校驗,解決了節(jié)點重啟時內(nèi)部處理可能出現(xiàn)的問題;同時進(jìn)一步提升了 SQL 告警信息和增強(qiáng)了日志收集、檢索功能。
低延遲同步至 TiDB,助力企業(yè)業(yè)務(wù)持續(xù)增長
伴隨著業(yè)務(wù)持續(xù)增長,企業(yè)訂單系統(tǒng)的數(shù)據(jù)庫壓力也不斷增加。核心交易庫寫流量巨大,造成訂單提交時間變長,影響網(wǎng)站用戶體驗。面對這一典型的業(yè)務(wù)場景,為了幫助提升企業(yè)縮短訂單提交時間,TiDB 支持作為下游只讀從庫提供業(yè)務(wù)查詢服務(wù),為核心交易系統(tǒng)減壓。
TiDB Data Migration (DM) 作為一款實時的數(shù)據(jù)同步工具,支持將數(shù)據(jù)從與 MySQL 協(xié)議兼容的數(shù)據(jù)庫同步到 TiDB,實現(xiàn)業(yè)務(wù)分流,減輕高峰期前端訂單寫入時的壓力。而交易場景高度的即時性,要求業(yè)務(wù)查詢延遲極低、數(shù)據(jù)實時性極高,這給 DM 的同步性能帶來了極大挑戰(zhàn)。
為了保證低延遲,數(shù)據(jù)遷移工具 DM 在 v5.3.0 實現(xiàn)了兩項優(yōu)化:
- 合并單行數(shù)據(jù)的多次變更,減少同步到下游的 SQL 數(shù)量,提高遷移效率,降低數(shù)據(jù)延遲,為網(wǎng)站用戶更快地提供業(yè)務(wù)查詢服務(wù);
- 批量的點查更新合并為單一的語句操作,減少遠(yuǎn)程過程調(diào)用請求的數(shù)量,同樣數(shù)量的 binlog 可以更快地同步完成,進(jìn)而降低延遲,為網(wǎng)站用戶更準(zhǔn)確地提供業(yè)務(wù)查詢服務(wù)。
極低的同步延遲保障了下游 TiDB 數(shù)據(jù)查詢實時性,企業(yè)在保持現(xiàn)有架構(gòu)的情況下,無需進(jìn)行大規(guī)模改造,就能快速引入 TiDB 以增強(qiáng)實時查詢分析能力,更好更快萃取數(shù)據(jù)價值。
經(jīng)場景實測,在 300K QPS 數(shù)據(jù)同步流量下,99.9% 時間內(nèi) DM 同步延遲降低至 1 秒以內(nèi),尤其適用于高負(fù)載業(yè)務(wù)壓力下 TiDB 作為只讀從庫的場景。
新增并行導(dǎo)入功能,提升全量數(shù)據(jù)遷移效率
目前 MySQL 分庫分表架構(gòu)日益普遍,很多企業(yè)的數(shù)據(jù)量已經(jīng)達(dá)到百 TB 級別。隨著企業(yè)數(shù)據(jù)量的增長,從集中式數(shù)據(jù)庫遷移到以 TiDB 為代表的分布式數(shù)據(jù)庫已經(jīng)成為必然,然而存量系統(tǒng)里面的 100 TB 數(shù)據(jù)沒有方便高效的工具進(jìn)行遷移。
為解決此問題,TiDB 5.3.0 發(fā)布了 TiDB Lightning 并行導(dǎo)入功能,提供了高效的 TiDB 集群初始化能力。用戶可以同時啟動多個 TiDB Lightning 實例,并行地將單表或者多表數(shù)據(jù)遷移到 TiDB,速度可以橫向擴(kuò)展,極大地提高了數(shù)據(jù)遷移效率。
并行導(dǎo)入示意圖如下。用戶可以使用多個 TiDB Lightning 實例導(dǎo)入 MySQL 的分表到下游的 TiDB 集群。
并行導(dǎo)入功能支持多種數(shù)據(jù)源,包括:CSV/SQL 格式的文本數(shù)據(jù)、MySQL 分表導(dǎo)出數(shù)據(jù) 。支持的最大單表規(guī)模在 20 TB ~ 30 TB 之間,導(dǎo)入單表數(shù)據(jù)建議使用 1 個 ~ 8 個 TiDB Lightning 實例,每個實例最佳規(guī)模保持在 2 TB~ 5 TB 。對于多表總規(guī)模和使用 Lightning 的個數(shù)沒有上限要求。
經(jīng)測試,使用 10 臺 TiDB Lightning,20 TB 規(guī)模的 MySQL 數(shù)據(jù)可以在 8 小時內(nèi)導(dǎo)入到 TiDB,單臺 TiDB Lightning 可以支持 250 GB/h 的導(dǎo)入速度,整體效率提升了 8 倍。
引入臨時表,一條 SQL 語句簡化業(yè)務(wù)邏輯并提升性能
業(yè)務(wù)臨時中間數(shù)據(jù)存儲不易
在數(shù)據(jù)量大的場景下,用戶業(yè)務(wù)常常需要處理龐大的中間數(shù)據(jù)。如果業(yè)務(wù)需要反復(fù)使用數(shù)據(jù)中的一部分子集,用戶通常會臨時保存這部分?jǐn)?shù)據(jù),用完后釋放。因此,DBA 不得不頻繁地建表和刪表,可能還需要自行設(shè)計數(shù)據(jù)存儲結(jié)構(gòu),把中間數(shù)據(jù)存儲至業(yè)務(wù)模塊中。這不僅增加了業(yè)務(wù)復(fù)雜度,也造成了龐大的內(nèi)存開銷,而且如果管理不善,還存在內(nèi)存泄漏導(dǎo)致系統(tǒng)崩潰的風(fēng)險。
TiDB 臨時表幫助用戶簡化業(yè)務(wù)邏輯并提升性能
為幫助用戶解決以上痛點,TiDB 在 5.3.0 版本中引入了臨時表功能。該功能針對業(yè)務(wù)中間計算結(jié)果的臨時存儲問題,讓用戶免于頻繁地建表和刪表等操作。用戶可將業(yè)務(wù)上的中間計算數(shù)據(jù)存入臨時表,用完后自動清理回收,避免業(yè)務(wù)過于復(fù)雜,減少表管理開銷,并提升性能。
TiDB 臨時表主要應(yīng)用于以下業(yè)務(wù)場景:
- 緩存業(yè)務(wù)的中間臨時數(shù)據(jù),計算完成后將數(shù)據(jù)轉(zhuǎn)儲至常規(guī)表,臨時表會自動釋放。
- 短期內(nèi)對同一數(shù)據(jù)進(jìn)行多次 DML 操作。例如在電商購物車應(yīng)用中,添加、修改、刪除商品及完成結(jié)算,并移除購物車信息。
- 快速批量導(dǎo)入中間臨時數(shù)據(jù),提升導(dǎo)入臨時數(shù)據(jù)的性能。
- 批量更新數(shù)據(jù)。將數(shù)據(jù)批量導(dǎo)入到數(shù)據(jù)庫的臨時表,修改完成后再導(dǎo)出到文件。
一條 SQL 語句輕松創(chuàng)建臨時表
可通過 CREATE [GLOBAL] TEMPORARY TABLE 語句創(chuàng)建臨時表。臨時表中的數(shù)據(jù)均保存在內(nèi)存中,用戶可通過 tidb_tmp_table_max_size 變量限制臨時表的內(nèi)存大小。
TiDB 提供的臨時表分為 Global 和 Local 兩類,無論使用哪種臨時表,都能有效幫助用戶簡化業(yè)務(wù)邏輯并提升性能:
- Global 臨時表:
- 對集群內(nèi)所有 Session 可見,表結(jié)構(gòu)持久化。
- 提供事務(wù)級別的數(shù)據(jù)隔離,數(shù)據(jù)只在事務(wù)內(nèi)有效,事務(wù)結(jié)束后自動刪除數(shù)據(jù)。
- Local 臨時表:
- 只對當(dāng)前 Session 可見,表結(jié)構(gòu)不持久化。
- 支持重名,用戶無需為業(yè)務(wù)設(shè)計復(fù)雜的表命名規(guī)則。
提供會話級別的數(shù)據(jù)隔離,降低業(yè)務(wù)設(shè)計復(fù)雜度,會話結(jié)束后刪除臨時表。
結(jié)語
本次發(fā)布的 5.3.0 版本進(jìn)一步完善了系統(tǒng)的可觀測性、提升了分布式數(shù)據(jù)庫可擴(kuò)展性、保證了數(shù)據(jù)的低延遲同步、大幅提升了全量數(shù)據(jù)遷移效率、提升了實時分析的穩(wěn)定性,是 TiDB 邁向成熟企業(yè)級 HTAP 平臺的一個重要里程碑。
PingCAP 首席架構(gòu)師唐劉表示:TiDB HTAP 的使命不僅僅局限于對傳統(tǒng)數(shù)據(jù)庫的升級或者是交易和分析處理性能的提升,本質(zhì)上 TiDB HTAP 是一個開放的生態(tài)體系,在企業(yè)中承擔(dān)著支持?jǐn)?shù)據(jù)服務(wù)消費化和構(gòu)建統(tǒng)一實時數(shù)據(jù)服務(wù)平臺的角色,為用戶帶來業(yè)務(wù)與架構(gòu)的創(chuàng)新與提升。
TiDB 的每一次發(fā)版和進(jìn)步都離不開每一位用戶的反饋、每一位開發(fā)者的 PR 合并、每一位質(zhì)量保證人員的測試。感謝所有人的貢獻(xiàn),TiDB 在后續(xù)版本中會不斷加強(qiáng)大規(guī)模場景下的穩(wěn)定性和易用性,不忘初心,砥礪前行,成為一款讓人愛不釋手的基礎(chǔ)軟件,給用戶帶來更好的使用體驗。