二、TiDB Server 架構管理
- 1 TiDB Server 的架構
- 2 TiDB Server 的主要功能
- 3 SQL 語句的解析和編譯 - Parse
- 4 SQL 語句的解析和編譯 - Compile
- 5 關係型資料與KV的轉化
- 6 SQL讀寫相關模組
- 7 線上DDL相關模組
- 8 GC機制與相關模組
- 9 TiDB Server的快取
1 TiDB Server 的架構
TiDB Server是無狀態的,可在一個TiDB資料庫中啟動多個TiDB Server,可通過負載均衡軟體如LVS、HAProxy、F5等提供統一的接入地址,客戶端可將連線均勻分攤到多個TiDB Server上。
TiDB Server 不儲存資料。
- 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 的主要功能
- 處理客戶端的連線——Protocol Layer(協議層)完成
- SQL 語句的解析和編譯——由Parse、Compile完成,生成執行計劃,交給Executor執行
- 關係型資料與KV的轉化
- SQL語句的執行——普通SQL:Executor、DistSQL、KV;事務:Transaction、KV
- 線上DDL的執行——schema load、worker、start job
- 垃圾回收——GC
3 SQL 語句的解析和編譯 - Parse
Parse模組:通過詞法分析(lex)、語法分析(yacc) 生成 AST抽象語法樹
給Compile模組
4 SQL 語句的解析和編譯 - Compile
Compile模組:根據AST抽象語法樹,生成可執行計劃。
-
驗證:語法驗證,如要查詢的表在資料庫中是否存在等合法性驗證。
-
邏輯優化:依據關係型代數的一些等價交換的規則,做邏輯變化。(在SQL語句層面上的優化)
-
物理優化:根據邏輯優化的結果,考慮資料的物理分佈、大小,決定用哪個運算元。(走索引還是全表掃描?等)
5 關係型資料與KV的轉化
將關係型資料(表)轉化為鍵值對(key-value):
- 聚簇表(使用表名+表的主鍵)
- 非聚簇表(不用表的主鍵,自己生成rowId)
Region是key-value的一個儲存單位,一個Region達到96MB後會分裂為兩個,就能分散式的儲存在不同TiKV結點。
6 SQL讀寫相關模組
- 對於較複雜的SQL(e.g.,範圍查詢、表連線、巢狀查詢)
- 為避免較複雜的SQL與TiKV存取的耦合度太高,通過DistSQL將對TiKV的請求封裝,提供一個單表的select方法。
- DistSQL涉及單張表,但可能涉及多個Region。
- 簡單的SQL請求(點查如利用主鍵索引或唯一索引進行等值查詢等)通過KV模組完成。
- 涉及事務的SQL,由Transaction負責二階段提交。需要PD Client向PD獲取時間戳TSO。
TiKV Client 接收KV的row kv request、處理DistSQL的複雜sql的投影、過濾等。向TiKV叢集傳送讀寫請求。
7 線上DDL相關模組
-
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)內的資料。
9 TiDB Server的快取
預設使用整個TiDB資料庫的全部記憶體。
TiDB Server 快取的組成部分:SQL的中間結果,執行緒快取,元資料、統計資訊
TiDB Server 快取管理:tidb_mem_quota_query(控制查詢預設使用的快取閾值),oom-action(當SQL查詢的記憶體使用超過閾值後怎麼操作,停止執行還是記錄日誌)