Skip to content

TiDB — 控制器與 API

分析版本

本文件基於 commit 6f4dd4fd 進行分析。

相關章節

MySQL 協定伺服器(pkg/server

pkg/server/ 實作了 TiDB 的 MySQL 協定伺服器,主要檔案包括:

檔案說明
server.goTCP 監聽、連線建立、Graceful Shutdown
conn.go單一客戶端連線的完整生命週期管理
http_status.goHTTP Status API 端點(監控與診斷用)
driver_tidb.goTiDB Session Driver,橋接 server 層與 session 層
packetio.goMySQL 封包讀寫緩衝

連線處理流程

TiDB 連線處理流程

HTTP Status API(pkg/server/http_status.go

TiDB Server 預設在 :10080 埠提供 HTTP 診斷 API:

端點方法說明
/statusGET回傳伺服器基本狀態(版本、連線數、uptime)
/metricsGETPrometheus 指標匯出(scrape endpoint)
/settingsGET/POST動態讀取/修改系統變數
/schemaGET取得 Database Schema 資訊
/schema/{db}/{table}GET取得指定資料表的 Schema 詳情
/tables/{colID}/{rowID}GET依 Column ID / Row ID 查詢資料
/ddl/historyGET查看 DDL 歷史記錄
/ddl/owner/resignPOST讓當前 DDL Owner 主動放棄 Owner 身份
/infoGET叢集所有 TiDB Server 的版本與狀態資訊
/info/allGET所有節點的詳細資訊
/regions/metaGETRegion 元資料列表
/regions/hotGET熱點 Region 資訊
/debug/pprof/GETGo pprof 效能分析端點
/optimize_tracePOSTSQL 優化追蹤(Optimizer Trace)

Session 管理(pkg/session

Session 是 TiDB 中每個客戶端連線的核心抽象,主要檔案:

檔案說明
session.goSession 介面定義與主要實作(sessionCtx
txn.go事務狀態機、Commit/Rollback 邏輯
txnmanager.go事務管理器,處理 BEGIN/START TRANSACTION
bootstrap.goTiDB Server 啟動時的 Bootstrap 邏輯(建立系統資料表)
tidb.go對外的 SQL 執行入口

Session 生命週期

TiDB Session 生命週期

Information Schema(pkg/infoschema

Information Schema 在 TiDB 中以 in-memory 快取實作,而非每次查詢都去 TiKV 讀取:

機制說明
版本化快取每個 Schema 版本對應一份 infoschema 快取
快取回收維護最近 N 個版本的快取,老舊版本被 GC 回收
事件監聽DDL 執行後觸發 infoschema 版本升級
延遲載入Table 的詳細資訊(欄位、索引)採用懶載入策略

Plugin 系統(pkg/plugin

TiDB Plugin 系統允許在不修改核心原始碼的情況下擴充功能:

插件類型說明
Audit審計日誌,記錄 SQL 操作(企業版常用)
Schema Validator自訂 Schema 驗證邏輯
Password Validation密碼強度驗證規則
Auth自訂認證後端

Plugin 以 Go Plugin(.so 動態函式庫)形式載入,透過 --plugin-dir--plugin-load 參數啟用。

Privilege 管理系統(pkg/privilege

TiDB 的權限系統完全相容 MySQL,核心設計:

表格說明
mysql.user全域使用者帳號與全域權限
mysql.db資料庫級別權限
mysql.tables_priv資料表級別權限
mysql.columns_priv欄位級別權限
  • 支援 GRANTREVOKESHOW GRANTS 語句
  • 支援 基於角色的存取控制(RBAC)CREATE ROLEGRANT role TO user
  • 支援 Dynamic Privilege(動態權限),如 BACKUP_ADMINRESTORE_ADMIN
  • 支援 列級別安全(Column-Level Privilege)

Prometheus 指標(pkg/metrics

TiDB 向 Prometheus 匯出豐富的觀測指標:

指標分類說明
tidb_server_query_totalSQL 查詢計數(依類型分類)
tidb_server_query_duration_secondsSQL 執行耗時直方圖
tidb_server_connections當前連線數
tidb_session_transaction_duration_seconds交易執行耗時
tidb_tikvclient_backoff_secondsTiKV 退避重試統計
tidb_owner_watch_owner_duration_secondsDDL Owner 選舉延遲
tidb_executor_statement_total算子執行計數
tidb_domain_load_schema_duration_secondsSchema 載入耗時
tidb_distsql_handle_query_duration_seconds分散式 SQL 查詢耗時

官方提供預建的 Grafana Dashboard,可直接匯入 Grafana 使用。

基於 Apache 2.0 授權