https://www.jianshu.com/p/01e49a93f671
description: "本课程专为将在工作中使用 TiDB 数据库的开发人员、DBA 和架构师设计。 本门课侧重于 TiDB 数据库的架构和设计原则,这是未来管理、开发、性能调整和故障排除的基础。在学习本课程前,您需要具备基本的计算机、操作系统、网络和数据库知识。"
date: 2022.11.06 10:34
categories:
- Database
tags: [Database, TiDB]
keywords: TiDB, PD, TiDB Server, TiKV, TiFlash, Raft, RocksDB, Region, HTAP, OLTP, OLAP, MVCC
在线学习地址:https://learn.pingcap.com/learner/course/960001
TiDB 整体架构:TiDB Server、TiKV、TiFlash、PD
TiDB Server 架构
ALTER TABLE users CACHE;
将 users 表放入 TiDB Server 的 cache table
中。tidb_table_cache_lease=5
参数控制缓存租约。5s 之内用户可以从缓存中读取数据;租约到期前,任何用户不能修改此表,租约过期后,写数据直接写入 TiKV,读也是从 TiKV 读,完成写操作之后,缓存重新续约,缓存内容也会刷新。所以当租约到期时,读性能会下降。不支持对缓存表直接做 DDL 操作,需要先关闭。Protocol Layer 通过 PD Client 异步向 PD 请求 TSO,同时继续进行 SQL 解析和编译,在实际执行前,获取异步请求 TSO 的结果
TiKV 架构
sync_log=true
将数据直接写入到磁盘,避免先写入到操作系统的缓存再批量刷到磁盘中而产生的故障时数据丢失的问题),再将数据写入内存的 MemTable
中(避免因断电等故障导致的内存中数据丢失),MemTable
中数据写满后,转为 immutable MemTable
,有一个 immutable MemTable
就会触发向磁盘的写入。如果写 MemTable
速度远大于 immutable MemTable
写入磁盘的速度,会触发 RocksDB 的流控,导致客户端写入速度降低。Level 0
是对 immutable MemTable
内容的复刻(转储)。每层数据达到限额时,会进行压缩及按 key 排序,形成下一层的文件(Level 0 不需要排序)。MemTable
、SST
文件等,但共享一份 WAL
文件。写入数据时可指定列簇,不指定时会使用默认的 Default
列簇。Default
、Lock
、Write
Write
列簇中,否则会被存入到 Default
列簇中raftsotre pool
和 apply pool
两个线程池DML读流程:
DML写入执行:
DDL语句的执行:主要在TiDB Server
server.labels:{zone:"BeiJing", rack:"Rack-1", host: "TiKV-1"}
CREATE PLACEMENT POLICY P1
PRIMARY_REGION="TiKV-5"
REGIONS="BeiJing, Tokyo, ShangHai, London"
FOLLOWERS=4;
CREATE TABLE T5 (id INT) PLACEMENT POLICY=P1;
ALTER TABLE users CACHE
;tidb_table_cache_lease
,用于设置缓存租约,默认为5s,租约内只能读不能写。租约到期,内存中的版本过期,此时可以在TiKV中直接写。> set config tikv pessimistic-txn.pipelined='true';
> set config tikv pessimistic-txn.in-memory='true';