二、TiDB Server 架構原理


1 TiDB Server 的架構

TiDB Server是無狀態的,可在一個TiDB數據庫中啟動多個TiDB Server,可通過負載均衡軟件如LVS、HAProxy、F5等提供統一的接入地址,客戶端可將連接均勻分攤到多個TiDB Server上。

TiDB Server 不存儲數據。

image-20211209211859266
  • Protocol Layer、Parse、Compile:SQL的解析和編譯,生成SQL語句的執行計划,交給Executor
  • Executor、DistSQL、KV:分批執行SQL的執行計划
  • Transaction、KV:事務的執行
  • PD Client、TiKV Client:與PD、TiKV交互
  • schema load、worker、start job:online DDL(DDL語句不阻塞讀寫)
  • memBuffer:緩存讀取的數據及元數據、登錄的認證信息、統計信息等
  • GC:垃圾回收

2 TiDB Server 的主要功能

  1. 處理客戶端的連接——Protocol Layer(協議層)完成
  2. SQL 語句的解析和編譯——由Parse、Compile完成,生成執行計划,交給Executor執行
  3. 關系型數據與KV的轉化
  4. SQL語句的執行——普通SQL:Executor、DistSQL、KV;事務:Transaction、KV
  5. 在線DDL的執行——schema load、worker、start job
  6. 垃圾回收——GC

3 SQL 語句的解析和編譯 - Parse

Parse模塊:通過詞法分析(lex)、語法分析(yacc) 生成 AST抽象語法樹 給Compile模塊

image-20211209213623468

4 SQL 語句的解析和編譯 - Compile

Compile模塊:根據AST抽象語法樹,生成可執行計划。

  • 驗證:語法驗證,如要查詢的表在數據庫中是否存在等合法性驗證。

  • 邏輯優化:依據關系型代數的一些等價交換的規則,做邏輯變化。(在SQL語句層面上的優化)

  • 物理優化:根據邏輯優化的結果,考慮數據的物理分布、大小,決定用哪個算子。(走索引還是全表掃描?等)

image-20211209214011779

5 關系型數據與KV的轉化

將關系型數據(表)轉化為鍵值對(key-value):

  • 聚簇表(使用表名+表的主鍵)
  • 非聚簇表(不用表的主鍵,自己生成rowId)

Region是key-value的一個存儲單位,一個Region達到96MB后會分裂為兩個,就能分布式的存儲在不同TiKV結點。

6 SQL讀寫相關模塊

  1. 對於較復雜的SQL(e.g.,范圍查詢、表連接、嵌套查詢)
    • 為避免較復雜的SQL與TiKV存取的耦合度太高,通過DistSQL將對TiKV的請求封裝,提供一個單表的select方法。
    • DistSQL涉及單張表,但可能涉及多個Region。
  2. 簡單的SQL請求(點查如利用主鍵索引或唯一索引進行等值查詢等)通過KV模塊完成。
  3. 涉及事務的SQL,由Transaction負責二階段提交。需要PD Client向PD獲取時間戳TSO。

TiKV Client 接收KV的row kv request、處理DistSQL的復雜sql的投影、過濾等。向TiKV集群發送讀寫請求。

image-20211210165335959

7 在線DDL相關模塊

image-20211210165444841
  • Start job接收用戶的DDL,並將此DDL作為一個job放在TiKV中的任務隊列中。

  • 多個TiDB Server中只有Owner的workers能取任務隊列中的一個job執行,執行完成后放在歷史隊列中。

  • schema load將最新的所有表的schema信息同步到Owner緩存中。

多個TiDB Server可同時接收多個用戶的在線DDL,但同一時刻只能有一個TiDB Server進行DDL操作。

TiDB Server中的Owner有任期,由選舉產生。

why要將DDL放到TiKV?為了防止宕機后DDL丟失

8 GC機制與相關模塊

TiDB Server回收事務,因為它實現了MVCC(多版本並發控制),所以是異地更新的。

被選為GC Leader的TiDB Server控制GC:

計算時間戳safe_point,GC保留 GC_life_time(當前時間到safe_point)內的數據。

image-20211210170628780

9 TiDB Server的緩存

默認使用整個TiDB數據庫的全部內存。

TiDB Server 緩存的組成部分:SQL的中間結果,線程緩存,元數據、統計信息

TiDB Server 緩存管理:tidb_mem_quota_query(控制查詢默認使用的緩存閾值),oom-action(當SQL查詢的內存使用超過閾值后怎么操作,停止執行還是記錄日志)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM