tidb server mock

目录 TiDB Server架构 Online DDL GC 缓存管理 热点小表缓存 例题 TiDB Server架构 Protocol Layer :负责处理客户端的连接 Parse,Compile :负责SQL语句的解析与编译,并生成执行计划 Executor,DistSQL,KV :

目录

TiDB Server架构

Online DDL

GC

缓存管理

热点小表缓存

例题


TiDB Server架构

Protocol Layer:负责处理客户端的连接

Parse,Compile:负责SQL语句的解析与编译,并生成执行计划

Executor,DistSQL,KV:负责执行计划的执行

DistSQL:负责有关索引,扫描的处理(将复杂的SQL转化成对单表的查询)

KV:负责点查(点查则直接跳过逻辑优化和物理优化,直接下推至TiKV Coprocessor

进行点查的条件:使用简单的SQL语句(select/update/delete)影响单表的1行或0行数据

Transaction,KV:负责事务的执行

PD Client:负责与PD的交互

TiKV Client:负责与TiKV的交互

schema load,worker,start job:负责Online DDL(DDL不阻塞线上业务)

memBuffer:缓存查询结果及元数据,登入认证信息,统计信息

cache table:热点小表缓存(表大小限制64mb)

热点小表有如下特点:(1)数据量不大,(2)只读或不经常被修改,(3)访问很频繁
 

Parse

词法分析lex

SQL语句的抽象,将其解析成token

语法分析yacc

生成AST语法树,供Compile优化

Complie

验证

合法性校验,如表是否存在等

逻辑优化

SQL语句层面的优化,如将外连接变为内连接等,生成逻辑执行计划

物理优化

结合统计信息和元数据,根据代价的大小,选择索引或扫描,生成物理执行计划

元数据包括如表名,列名,索引名等

Executor,DistSQL,Transaction,KV

DistSQL

负责将复杂的SQL语句转化为对单表查询

KV

负责简单SQL语句的执行,即点查,提交row KV request

Transaction

负责事务和锁的管理

运作过程:

以该表为例

 转化为键值对

 添加表ID

形成region 

 超出region大小限制(96MB-114MB),进行分裂(split)

 分布存储至TiKV中

行数据的映射规则

Key:T{tableID}_r{rowID}

Value: [col1, col2, col3, col4,...]

ps:对于有主键的表,rowID可以为主键;对于没有主键的表,rowID由PD分配行

聚簇表与非聚簇表

聚簇表:key使用原有的主键,表编号+主键形成唯一的Key

非聚簇表:key不使用原有的主键 (但是可以有也可以没有主键),表编号+自动分配行id

Online DDL

进行DDL操作,不阻塞读写

1.对于整个TIDB数据库,同一时刻只能有一个Tidb server进行DDL操作 

2.且同一时刻只能有一个Onwer,只有Onwer的workers处理DDL操作

(即只能有一个workers工作)

Onwer

 同一时刻只能有一个TiDB Server成为Onwer; 

Onwer不是固定的,而是有任期限制的,当任期结束后重新发起选取新的TiDB Server成为Onwer

当某个Tidb server成为owner后schema load将最新的表(schema)同步至缓存 

ps:

Onwer的选举由ETCD提出

DDL语句是可并行执行:虽然只有一个Onwer,不可以并行job queue中的job,但可以并行执行add index queue和job queue中的job

GC

safe point:

safe point之前的历史数据均会被清理

GC_life_time参数设置,保留多长时间的历史版本

如GC_life_time=10min(10min内保留历史版本),safe point=10min

GC leader:控制整个集群的GC

缓存管理

tidb_mem_quta_query:决定每条SQL所占用的空间 

com-action:当超过设置值的操作,如中断操作,生成日志等

热点小表缓存

表大小限制64MB 

租约

设置租约的目的:解决对热点小表的修改,带来读写一致性问题(缓存内的表和TiKV内的表不一致)

使用tidb_table_cache_lease参数设置租约期

如tidb_table_cache_lease=5(租约期5s)

租约期内用户可以从内存中读,但不能写 

 租约到期后,缓存的表过期,用户即可读也可写(是对TiKV内的表进行修改,性能下降)

 重新进入租约后,重新从TiKV中载入缓存,用户再次只能读不能写(refresh过程)

同时得出结论:租约不阻塞读,只阻塞写

例题

1.下列哪些模块直接与TiDB的事务处理有关?(选2项)

A.KV

B.Parse

C.Schema load

D.Transaction

E.GC

F.start job

答案:A,D

解析:Transaction(A),KV(D):负责事务的执行;Parse(B):负责SQL语句的解析;schema load(C):当TiDB Server当选为Owner时,将最新的表schema同步至缓存(E)GC:负责垃圾回收;start job(F):接收DDL语句

2.关于关系型数据与KV的转化,下列说法不正确的是?

A.如果没有定义主键,key中包含RowID,Index ID和Table ID,都是int64类型

B.Table ID在整个集群内唯一

C.如果定义了主键,那么将使用主键作为RowlD

D.不需要为每张表指定主键

答案:C

解析:A:表table id(全局唯一),索引index id,表中row id(64int类型,不管是否有主键,系统自动成);C:聚簇表需要主键作为Key,非聚簇表不需要主键作为Key,但可以使用主键,也可以不使用

知秋君
上一篇 2024-08-13 08:48
下一篇 2024-08-13 08:12

相关推荐